我有这些对象:
@Data
@Entity
@Table
@EqualsAndHashCode(callSuper = true)
public class User extends AbstractEntity implements Serializable {
private static final long serialVersionUID = -55089179131569489L;
private String username;
private String email;
private boolean admin;
private String name;
private String surname;
@OneToMany(mappedBy = "owner")
private List<Ad> ads;
}
和
@Entity
@Table
@Data
@EqualsAndHashCode(callSuper = true)
public class Ad extends AbstractEntity implements Serializable {
private static final long serialVersionUID = -4590938091334150254L;
private String name;
private String description;
private double price;
@Enumerated(EnumType.STRING)
private Category category;
@ManyToOne(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
@JoinColumn(name = "OWNER_ID")
private User owner;
}
当我尝试使用类型为Ad.class的对象并在用户类型为User.class的现有对象中执行POST(已经在数据库中)时,该服务仅保存Ad对象,并且连接列“ OWNER_ID”保持为空。
我认为映射是正确的。您能帮我解决问题吗?
这是我的存储库:
@Repository
@Transactional(readOnly = true)
public interface AdRepository extends PagingAndSortingRepository<Ad, String>
{}
这是我的RestRepository
@RepositoryRestResource(collectionResourceRel = "ad", path = "ad")
public interface AdRestRepository extends PagingAndSortingRepository<Ad, String> {}
答案 0 :(得分:1)
如果我退后一步,概括一下您的问题,
您正在尝试发布一个子资源,并期望
的两种操作只需一次通话即可实现。
但是不幸的是,spring-data-rest并不不支持这种行为。您需要致电2次。
/ads
users/{ownerId}
。看看官方文档的this部分。