Mysql jpa hibernate cascade.merge,插入一对多关系而不是合并

Mysql jpa hibernate cascade.merge,插入一对多关系而不是合并,mysql,hibernate,jpa,java-ee-7,wildfly-10,Mysql,Hibernate,Jpa,Java Ee 7,Wildfly 10,我有这种实体 @Entity public class CartItem { String cItemId; } @Entity public class Cart { @OneToMany(cascade={MERGE, PERSIST}, orphanRemoval=true, fetch=EAGER) Set<CartItem> cartItems; } 问题是hibernate确定购物车项目是新的,并对级联执行插入而不是更新,因此我得到了数据库异

我有这种实体

@Entity
public class CartItem {
    String cItemId;
}

@Entity
public class Cart {

    @OneToMany(cascade={MERGE, PERSIST}, orphanRemoval=true, fetch=EAGER)
    Set<CartItem> cartItems;
}
问题是hibernate确定购物车项目是新的,并对级联执行插入而不是更新,因此我得到了数据库异常:

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '1469166285629-1a6205be-315b-4bc2-8390-9c7b19ade518-1484522387119' for key 'PRIMARY'
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
重复条目发生在联接表
Cart\u CartItem
表上,因为hibernate不执行合并,而是执行插入,但该CartItem已在联接表上引用

这并没有发生,它突然开始了,我想知道什么是错的

我的场景:

  • 野蝇10(野蝇冬眠)
  • 爪哇8

如果映射中已有
cascade.MERGE,PERSIST
存在,为什么要手动更新
cartItem
?已更新以消除
update
方法上的混淆。该方法只处理cart_项目,不会更新为dbNot getting the issue。可能您可以尝试使用
@Transaction(REQUIRES_NEW)
如果存在
cascade.MERGE,PERSIST
映射中已经存在了吗?更新以消除
update
方法上的混淆。该方法只处理cart_项目,不会更新为dbNot getting the issue。可能您可以尝试使用
@Transaction(需要\u NEW)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '1469166285629-1a6205be-315b-4bc2-8390-9c7b19ade518-1484522387119' for key 'PRIMARY'
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)