将父项和子项保存在单个JSON POST上

时间:2018-12-03 14:36:52

标签: java spring spring-data-jpa spring-data-rest

我正在开发一个电子商务平台。我有一个“产品”实体作为父级,而“ Pimage”实体作为子级。

两个实体都有一个CrudRepository。

以这种方式对实体建模:

VisitPlus

现在,如果我发送这样的PUT请求:

Visit(context.argument);

我在数据库中看到保存了Product实体,也保存了Pimage实体,但是PImage实体的“ productid”值为null。

如何在我的Pimage实体的“ productid”字段中保存productid?

如果我尝试使用类似的方法手动进行操作,则一切正常,并且PImage的productid字段已正确设置:

public class Product implements Serializable {
    private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private BigInteger id;


// ....

//bi-directional many-to-one association to Pimage
@OneToMany(cascade = {CascadeType.ALL,CascadeType.PERSIST,CascadeType.MERGE}, mappedBy="product")
private List<Pimage> pimages = new LinkedList<Pimage>();

public List<Pimage> getPimages() {
    return this.pimages;
}

public void setPimages(List<Pimage> pimages) {
    this.pimages = pimages;
}

public Pimage addPimage(Pimage pimage) {
    getPimages().add(pimage);
    pimage.setProduct(this);

    return pimage;
}

//....

public class Pimage implements Serializable {
    private static final long serialVersionUID = 1L;

    // ...

    @ManyToOne
    @JoinColumn(name="productid")
    private Product product;

    // ...



@RepositoryRestResource(exported=false)
public interface PimagesRepository extends PagingAndSortingRepository<Pimage, BigInteger> {

}

谢谢。

1 个答案:

答案 0 :(得分:0)

为了帮助遇到相同问题的人,艾伦·海伊(Alan Hay)提供了一个指向我问题的可能重复项目的链接,在那里我找到了一个遇到相同问题的人,并提供了解决方案:

https://stackoverflow.com/a/46971491/1218425

在双向关联中,您需要手动设置父ID。

谢谢艾伦·海伊。

最诚挚的问候。