【发布时间】:2014-11-17 01:02:44
【问题描述】:
我的代码:
我正在尝试更新/插入。它被正确插入,唯一的问题是当我尝试更新它时,它会给出以下错误消息。
private String sessionType=null;
public String getAccountsDetails(List<Account> accountList) {
Session session = sessionFactory.openSession();
for (Account account : accountList) {
AccountDetails accountDetails = new AccountDetails();
accountDetails.setAccountsId(Long.parseLong(account.getId()));
accountDetails.setAccounttype(account.getAccountType().value());
Query query = session.createQuery("from QBAccounts qba where qba.accountsId=:accId");
List<AccountDetails> queryList = query.setParameter("accId", accountDetails.getAccountsId()).list();
if(queryList.size()>0){
session.update(accountDetails);
}else{
session.save(accountDetails);
}
}
session.flush();
session.beginTransaction().commit();
session.clear();
session.close();
return "Successfully data updated into table";
}
错误:
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.trinet.mulesoft.quickbooks.dto.AccountDetails#0]
at org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:638)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:305)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:246)
编辑 2:
我用过
session.merge(accountDetails)
没有错误,但它总是将数据插入数据库而不是更新。
【问题讨论】:
-
你为什么使用两个不同的会话?您可以在同一会话中处理保存和更新,除非我遗漏了什么。看看这是否有帮助tech.lalitbhatt.net/2014/07/…
-
@lalit,我尝试了相同的会话,正如我所告知的,它第一次插入时效果很好,然后下一步是更新,它会抛出同样的错误。早些时候我遇到过时的对象状态异常,所以我使用了不同的会话。以上更新。
标签: hibernate hibernate-mapping