创建新元素时出现EntityExistsException

时间:2013-01-21 18:29:45

标签: java hibernate

这是我的豆子:

@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "cl_id")
private Long clId;

@JoinColumn(name = "zip_id", referencedColumnName = "zip_id")
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
private Zip zipId;
@JoinColumn(name = "city_id", referencedColumnName = "city_id")
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
private City cityId;
@JoinColumn(name = "street_id", referencedColumnName = "street_id")
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
private Street streetId;

我的问题是,每当我尝试插入一个使用的新客户端时 一个已经存在的拉链,城市或街道我收到此错误:

Exception in thread "AWT-EventQueue-0" javax.persistence.EntityExistsException: 
Exception Description: Cannot persist detached object [bean.Zip[zipId=17]]. 
Class> com.jresto.common.bean.Zip Primary Key> [17]
at  oracle.toplink.essentials.internal.ejb.cmp3.base.EntityManagerImpl.persist(EntityManagerImpl.java:208)

它不考虑 CascadeType.MERGE 部分。

1 个答案:

答案 0 :(得分:0)

你是一个新的Bean(假设这是你的实体的名称)。你告诉Hibernate,每当你坚持使用Bean时,还必须在Bean的zip上调用persist()。并且bean包含一个zip,其zip已经存在于数据库中。显然,你得到了这个例外。

使用merge()而不是persist,或者从会话中查找zip,将检索到的持久zip附加到bean,并持久化bean。

级联ManyToOne关联有点奇怪。你有几个bean实例共享一个zip,每当你修改其中一个bean时,就会修改所有其他bean的zip。