Java 在我的事务中获取org.hibernate.unUniqueObjectException

Java 在我的事务中获取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

在执行这些步骤时,我得到org.hibernate.ununiqueobjectexception

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]