Ich versuche, entweder Update/Insert zu tun. Es wird richtig eingefügt, nur Problem, wenn ich versuche, es zu aktualisieren gibt unten Fehlermeldung.
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";
}
Fehler:
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)
EDIT 2:
I
verwendet habensession.merge(accountDetails)
kein Fehler vorhanden ist, aber es funktioniert immer Daten in db einfügen statt der Aktualisierung.
Warum verwenden Sie zwei verschiedene Sitzungen? Sie können in derselben Sitzung speichern und aktualisieren, es sei denn, ich verpasse etwas. Sehen Sie, ob dies hilft http://tech.lalitbhatt.net/2014/07/hibernate-persistent-context-and-session.html – lalit
@lalit, ich versuchte mit der gleichen Sitzung, wie ich informiert, es funktioniert gut für die Einfügung für die das erste Mal, dann der nächste Schritt ist Update, es wirft denselben Fehler. Früher habe ich eine veraltete Objektstatusausnahme bekommen, also habe ich eine andere Sitzung benutzt. Oben aktualisiert. – TechFind