@ManyToOne关系在Spring Data REST中插入空对象

时间:2018-07-31 19:47:45

标签: java mysql spring jpa

我是Spring Data REST的新手,成功创建了一些实体后,我遇到了问题。 我有一个表shopping_list,其中包含一些shopping_list_products,shopping_list_product与shopping_list有关系,所有这些都在mysql数据库中。 问题是,当我尝试创建一个包含一些产品的购物清单时,会创建该清单,而不是产品。在响应中,我可以看到ID为“ null”的产品。

这些是类(避免使用getter / setter方法):

购物清单:

> (loop for it in '(1 2 3 4)         ;wrong
       when (evenp it) collect it)
(T T)

ShoppingListProduct:

@Entity
@Table(name = "shopping_list")
public class ShoppingList {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private Date creationDate;
@RestResource(exported=false)
@OneToMany(mappedBy="shoppingList")
private List<ShoppingListProduct> shoppingListProducts;

这就是当我尝试用邮递员插入一些产品时发生的事情:

我插入这个:

@Entity
@Table(name = "shopping_list_products")

public class ShoppingListProduct {
   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
   private Long id;
   private String name;
   private boolean checked;
   @ManyToOne(fetch=FetchType.EAGER, cascade = CascadeType.ALL)
   @JoinColumn(name = "shopping_list_id")
   private ShoppingList shoppingList;

然后我得到201(创建的)响应,并显示以下结果:

{
"name" : "name",
"creationDate" : "2018-12-12",
"shoppingListProducts" : [
        {
            "name" : "product 1",
            "checked" : false
        },
        {
            "name" : "product 2",
            "checked" : true
        }
    ]
}

如您所见,在shoppingList中为产品创建的resourceId为null,如果我转到数据库,则不会创建任何产品。

我找不到问题所在,所以非常感谢您的帮助。

谢谢!

2 个答案:

答案 0 :(得分:0)

请尝试将id的注释更改为:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)

答案 1 :(得分:0)

好吧,多亏@BillyFrost,我在@OneToMany上添加了一个层叠,此后我收到500错误,指出shopping_list_id不能为null。 因此,我编辑了shoppingListProducts的设置方法,以设置当前的购物清单,如下所示:

public void setShoppingListProducts(List<ShoppingListProduct> shoppingListProducts) {

    for (ShoppingListProduct sp : shoppingListProducts) {
            sp.setShoppingList(this);   
    }

        this.shoppingListProducts = shoppingListProducts;
}

现在可以了!

非常感谢您的帮助!