我是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,如果我转到数据库,则不会创建任何产品。
我找不到问题所在,所以非常感谢您的帮助。
谢谢!
答案 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;
}
现在可以了!
非常感谢您的帮助!