che sto cercando di fare sia l'aggiornamento/inserimento. Si inserisce correttamente, solo il problema è quando cerco di aggiornarlo dà sotto il messaggio di errore.
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";
}
Errore:
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:
ho usato
session.merge(accountDetails)
non v'è alcun errore, ma non sempre inserire i dati in db, invece di aggiornamento.
Perché stai utilizzando due sessioni diverse? Puoi occuparti di salvare e aggiornare nella stessa sessione, a meno che non mi manchi qualcosa. Vedi se questo aiuta http://tech.lalitbhatt.net/2014/07/hibernate-persistent-context-and-session.html – lalit
@lalit, ho provato con la stessa sessione, come ho informato, funziona bene per l'inserimento per il la prima volta, quindi il prossimo passo è aggiornato, genera lo stesso errore. In precedenza stavo ottenendo un'eccezione di stato dell'oggetto scaduto, quindi ho usato una sessione diversa. Aggiornato sopra. – TechFind