Java Spring jpa hibernate插入OneToMany
我正在尝试在表中插入数据(OneToMany)。我有两张桌子(好的,分类) 还有一个:Java Spring jpa hibernate插入OneToMany,java,spring,hibernate,rest,jpa,Java,Spring,Hibernate,Rest,Jpa,我正在尝试在表中插入数据(OneToMany)。我有两张桌子(好的,分类) 还有一个: @Entity @Table(name = "category_of_products") public class Category implements Serializable { @OneToMany(mappedBy = "category", fetch = FetchType.LAZY, cascade = { CascadeType.P
@Entity
@Table(name = "category_of_products")
public class Category implements Serializable {
@OneToMany(mappedBy = "category", fetch = FetchType.LAZY, cascade = {
CascadeType.PERSIST, CascadeType.REFRESH })
private List<Good> goods;
@JsonManagedReference
public List<Good> getGoods() {
return goods;
}
//getter, setters ommited
他们没有在我的表中插入任何内容
Hibernate: select category0_.id as id1_0_0_, category0_.name as name2_0_0_ from category_of_products category0_ where category0_.id=?
Hibernate: select goods0_.category_id as category7_0_0_, goods0_.id as id1_1_0_, goods0_.id as id1_1_1_, goods0_.category_id as category7_1_1_, goods0_.description as descript2_1_1_, goods0_.name as name3_1_1_, goods0_.price as price4_1_1_, goods0_.quantity as quantity5_1_1_, goods0_.short_description as short_de6_1_1_ from goods goods0_ where goods0_.category_id=?
方法persist也不起作用(分离实体异常)
道的例子
public Category saveOrUpdate(Category category) {
if (category != null) {
em.merge(category);
}
return category;
}
public void add(Category category) {
em.persist(category);
}
请给我一个提示,我做错了什么?这可能是一个测试解决方案,它可以根据您的测试进行演变: 有两件事要做:
CascadeType.PERSIST
更改为CascadeType.CASCADE\u ALL
以不必处理级联问题(此解决方案工作后,您可以回滚此问题)Category
类中添加一个addGood(Good Good)
,并在Good
类中添加一个Category
的setter(如果尚未存在)。您必须管理双向关系,将Good
连接到Category
并将Category
连接回Good
addGood
方法如下:
public void addGood(Good good) {
this.goods.add(good);
good.setCategory(this);
}
我已经试过了。。java.lang.IllegalStateException:正在合并同一实体[ua.internetshop.model.Good#1]的多个表示形式。独立:[ua.internetshop.model。Good@7842bec5]; 独立:[ua.internetshop.model。Good@1e897800]至少有一次失败。em.merge操作返回的对象与作为参数传递的对象不同。因此,您应该将其替换为category=em.merge(category);。但我认为这并不能解决您的问题。另外,我希望您清楚地知道,当您调用merge时,hibernate不会执行查询。这只会更新在提交时将持久化到数据库的内部表示。那么,您是否100%确定在提交后检查了日志。问题是:当类别为空,并且我试图添加一些产品时,一切都正常。但是,当我在caterory中至少有一个产品,并尝试添加新产品时,hibernate会在新产品上更新以前的产品,而不是插入新产品。感谢您的回复,但它仍然不起作用。。当我调试时,我两边都有合适的对象,请看下面的链接:@oki你能不能像你做的那样做一个屏幕截图,但我想看看该类别商品的java ID。在category和新创建的Good id中展开goods元素。如果我理解正确,您的意思是:事实上,在右边列value中的debug面板中,您的对象和JVM id是这样的Good(id=117)。这就是我的意思很好,但除此之外,我需要你扩展你选择的列表的元素?
public Category saveOrUpdate(Category category) {
if (category != null) {
em.merge(category);
}
return category;
}
public void add(Category category) {
em.persist(category);
}
public void addGood(Good good) {
this.goods.add(good);
good.setCategory(this);
}