我有一个 JPA 持久对象模型,其中包含多对一关系:Account
有很多Transactions
. A Transaction
有一个Account
.
这是代码片段:
@Entity
public class Transaction {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToOne(cascade = {CascadeType.ALL},fetch= FetchType.EAGER)
private Account fromAccount;
....
@Entity
public class Account {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToMany(cascade = {CascadeType.ALL},fetch= FetchType.EAGER, mappedBy = "fromAccount")
private Set<Transaction> transactions;
我能够创建一个Account
对象,向其添加事务,并持久化Account
正确地反对。但是,当我创建交易时,使用现有的已保留帐户,并坚持交易,我得到一个例外:
导致:org.hibernate.PersistentObjectException:传递给持久化的分离实体:com.paulsanwald.Account
在 org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:141)
所以,我能够坚持Account
包含交易,但不包含具有Account
。我以为这是因为Account
可能没有附加,但这段代码仍然给了我同样的异常:
if (account.getId()!=null) {
account = entityManager.merge(account);
}
Transaction transaction = new Transaction(account,"other stuff");
// the below fails with a "detached entity" message. why?
entityManager.persist(transaction);
如何正确保存Transaction
,与已经持续存在的Account
object?
解决办法很简单,只需使用CascadeType.MERGE
代替CascadeType.PERSIST
or CascadeType.ALL
.
我也遇到过同样的问题CascadeType.MERGE
对我有用。
我希望你能排序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)