Java 在我的事务中获取org.hibernate.unUniqueObjectException
在执行这些步骤时,我得到org.hibernate.ununiqueobjectexceptionJava 在我的事务中获取org.hibernate.unUniqueObjectException,java,hibernate,Java,Hibernate,在执行这些步骤时,我得到org.hibernate.ununiqueobjectexception session.beginTransaction(); TransactionEntry te = (TransactionEntry)session.get(TransactionEntry.class, primaryKey); session.getTransaction().commit(); . . . session.beginTransaction(); session.saveOr
session.beginTransaction();
TransactionEntry te = (TransactionEntry)session.get(TransactionEntry.class, primaryKey);
session.getTransaction().commit();
.
.
.
session.beginTransaction();
session.saveOrUpdate(te.getAccount());
session.delete(te);
session.delete(te.getTransaction());
session.getTransaction().commit();
我的模型快照如下所示:
TransactionEntry类
@Entity
public class TransactionEntry {
@Id
@GeneratedValue
private long txnEntryId;
@ManyToOne
@JoinColumn(name = "account")
private Account account;
@ManyToOne
@JoinColumn(name = "txnId")
private TransactionTable transaction;
}
帐户类别
@Entity
public class Account {
@Id
@GeneratedValue
private long accountId;
}
TransactionTable类
@Entity
public class TransactionTable {
@Id
@GeneratedValue
private long txnId;
@OneToMany(targetEntity = TransactionEntry.class, fetch = FetchType.LAZY,
mappedBy = "transaction", cascade = CascadeType.ALL)
private List<TransactionEntry> transactionEntries;
}
如果我删除会话.delete(te.getTransaction())代码>语句,则代码工作正常,否则将引发上述异常。是否有我遗漏的内容。会话。删除(te)
——由于cascade=CascadeType,它将删除TransactionEntry
以及TransactionTable
。全部
因此,session.delete(te.getTransaction())通过这一行,您将不会有任何东西
,这就是为什么它会说unonqueObjectException
下面是一步一步发生的情况:
- 行
session.saveOrUpdate(te.getAccount())代码>将帐户
对象(id为1)附加到会话
- 在
session.delete(te.getTransaction())行中
,在删除之前,hibernate尝试加载TransactionEntry
对象的集合(由于级联,集合中的对象也需要删除)
- 但是,当从集合中加载
TransactionEntry
对象时,hibernate也会加载成员帐户
对象,因为它映射了一个具有默认获取的注释
- 当到达与id为1的
帐户
对应的TransactionEntry
对象时,hibernate会抛出上述异常,因为会话中已存在该帐户
明天早上我可以核对答案。谢谢,对不起,拉梅什,这是另一条路。。我的会计课有个例外,我喜欢这个解释。为你争取选票。。问题仍然没有解决。实际上,我在一个单独的会话中获取TransactionEntry
,并且我验证了当我访问te.getTransaction().getTransactionEntries()
时,它在那里抛出LazyInitializationException
。我已经更新了问题,请看一下。
org.hibernate.NonUniqueObjectException: a different object with the same
identifier value was already associated with the
session: [com.pratikabu.pem.model.Account#1]