ich versuche, mit Hibernate zu arbeiten (Datenbankseite für erstes Mal) und einige, wie bei der Auswahl optimal getroffen saveOrUpdate oder Save.Update zu verwenden ich habe ein Ziel POJO-Klasse und ihre anderen Attribute, die muss zusammen mit der Destination-Entität aktualisiert werden. Ich erhalte eine zu importierende XML-Datei und verwende den folgenden Code, um die Zieleinheit zusammen mit ihren Attributklassen zu aktualisieren/zu speichern.Hibernate saveorUpdate Methode Problem
try{
getSessionFactory().getCurrentSession().beginTransaction();
getSessionFactory().getCurrentSession().saveOrUpdate(entity);
getSessionFactory().getCurrentSession().getTransaction().commit();
}
catch(Exception e){
getSessionFactory().getCurrentSession().getTransaction().rollback();
}
finally{
getSessionFactory().close();
}
alles funktioniert gut, bis ich die gleiche Sitzung bin mit instance.but später, wenn ich die gleichen XML-Datei bin mit dem Ziel PO für bestimmte Attribute aktualisieren es mir die folgenden Fehlermeldung zu geben.
SEVERE: Duplicate entry 'MNLI' for key 'DESTINATIONID'
9 Jan, 2011 4:58:11 PM org.hibernate.event.def.AbstractFlushingEventListener performExecutions
SEVERE: Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:94)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:114)
at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:109)
at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:244)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2242)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2678)
at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:79)
i UUID als Primärschlüssel für die Zieltabelle verwenden und in Zieltabelle habe ich eine Ziel-ID, die ist unique.but ich, dass in dem Fall secodn Hibernate verstehen kann, ist, nicht finden kann, wenn es bereits ein Eintrag für das gleiche Ziel in der Datenbank und versuchen, insert-Anweisung auszuführen, anstatt zu aktualisieren.
Eine mögliche Lösung ist, dass ich Benutzer Destinatid überprüfen kann, ob es bereits ein Ziel inplace mit der angegebenen ID und basierend auf den Ergebnissen kann ich speichern oder aktualisieren Befehl. meine Frage ist, kann dies auf eine andere gute Weise erreicht werden ..?
Vielen Dank im Voraus
Grund für die Sitzung getSessionFactory(). GetCurrentSession() in einer Variablen? – Baz1nga
machst du eine Session.Save() ?? – Baz1nga
@ User350374; mit dieser Methode nur für Testzwecke verwende ich saveOrUpdate() –