-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 7 posts ] 
Author Message
 Post subject: Conf: identifier_rollback, Zurücksetzen von Id beim Rollbac
PostPosted: Sun Jan 15, 2006 7:48 pm 
Newbie

Joined: Wed Dec 07, 2005 8:20 am
Posts: 10
Need help with Hibernate? Read this first:
http://www.hibernate.org/ForumMailingli ... AskForHelp

Hibernate version: 3.05

Mapping documents:

Code between sessionFactory.openSession() and session.close():


Hallo...

also.. mein ursprungliche Problem ist, dass nach einem Exception mit Rollback, man kann nicht mehr das gleiche Object mit save() speichern....

Nach stundenlange suchen im Forum, habe ich folgende Lösung gefunden, die bei mir leider (noch) nicht funktioniert...

Die Property : hibernate.use_identifier_rollback

Settings in hibernate.cfg.xml
<property name="hibernate.use_identifier_rollback">true</property>

leider trotz dieser Einstellung wie beschrieben, ist nach dem Rollback, ist die patient_id Attribute, die als id definiert ist, ist nicht zu null zurückgesetzt.

Kann irgendjeman helfen??
Vielen Dank im Voraus

Verwendung von Transaktion im Code:
Code:
Patient patient = null;
      Transaction tx = null;
      
      try {
         Session session = HibernateUtil.currentSession();
         tx = session.beginTransaction();
         
         PatientType pType = null;
         pType = (PatientType) session.createQuery(
               "from PatientType where patientType = '" + "Corpse" + "'")
               .uniqueResult();
         
         patient = new Patient();
         patient.setPatientId(null);
         patient.setPatientName(name);
         patient.setPatientSex(sex);
         patient.setPatientType(pType);

         session.save(patient);
         tx.commit();
         session.flush();

         HibernateUtil.closeSession();
      } catch (HibernateException e) {
         tx.rollback();
         e.printStackTrace();
      }



Top
 Profile  
 
 Post subject:
PostPosted: Fri Jan 27, 2006 5:01 pm 
Expert
Expert

Joined: Tue Nov 23, 2004 7:00 pm
Posts: 570
Location: mostly Frankfurt Germany
Das geht nur von Hand, also bei rollback auf null setzen. Das Thema gab es vor kurzem.

Gruß Sebastian

_________________
Best Regards
Sebastian
---
Training for Hibernate and Java Persistence
Tutorials for Hibernate, Spring, EJB, JSF...
eBook: Hibernate 3 - DeveloperGuide
Paper book: Hibernate 3 - Das Praxisbuch
http://www.laliluna.de


Top
 Profile  
 
 Post subject:
PostPosted: Tue Jan 31, 2006 4:38 pm 
Newbie

Joined: Wed Dec 07, 2005 8:20 am
Posts: 10
ich habe aber im anderen Posting gesehen, dass der Garvin diese Einstellung erwähnt hat...

<property name="hibernate.use_identifier_rollback">true</property>

und in Handbuch steht auch genauso....

deshalb frage ich, wie benutzt man das....
ich habe auch in den Test code gesucht, und dort steht nur ein einfacher Test, ohne bedeutung....

tja.. wofür hat man eine Einstellung, wenn es nicht funktioniert...
(zumindest bei mir, deshalb stelle ich ja die Frage)


Habe auch in englische Forum gepostet... leider auch keine Antwort.
http://forum.hibernate.org/viewtopic.php?t=954376

vielen vielen dank...


Top
 Profile  
 
 Post subject:
PostPosted: Thu Feb 02, 2006 5:38 pm 
Newbie

Joined: Tue Jan 24, 2006 10:02 pm
Posts: 12
Hi,

so wie ich die Beschreibung im Handbuch verstehe, hat das nix mit dem rollback einer Transaktion zu tun, sondern: Wenn du das Objekt transient machst, also mit session.delete aus der DB loeschst, wird der Identifier des Objekts in deiner Applikation zurueckgesetzt. Damit kannst du es
wieder mit session.save transient machen.
Scheint mir aber trotzdem ein kleiner Logikfehler im Transaktionsrollback von Hibernate zu sein, da jetzt eben nicht nur der Datenbankzustand rueckgaengig gemacht werden sollte, sondern auch der Objektzustand in der Applikation.
Einfach vielleicht mal als Verbesserung melden.

Gruss

Daniel


Top
 Profile  
 
 Post subject:
PostPosted: Wed Feb 08, 2006 5:40 am 
Newbie

Joined: Wed Dec 07, 2005 8:20 am
Posts: 10
Hmm...

I habe den Threads noch mal gelesen...
http://forums.hibernate.org/viewtopic.php?p=2234009

vielleicht hast du recht... dass es nur für Object Deletion funktioniert...
ich probiere das erstmal....

Übrigens...
bis jetzt habe ich an das problem nicht weiter gearbeitet...
und in anderen Threads steht auch dass man manuell die ID auf NULL setzen soll, wenn ein Transaction fehlschlägt (ROLLBACK)

trotzdem danke..


wenn ich was finde, dann poste ich hier wieder...


Top
 Profile  
 
 Post subject: Re: Conf: identifier_rollback, Zurücksetzen von Id beim Rol
PostPosted: Thu Feb 09, 2006 6:04 am 
Beginner
Beginner

Joined: Mon Dec 05, 2005 4:15 am
Posts: 36
Hallo,

ich vermute es liegt daran dass du zwar den Rollback machst, aber die Sitzung offen bleibt:

} catch (HibernateException e) {
tx.rollback();
e.printStackTrace();
}


nach einer Exception ist der Zustand der Sitzung nicht konsistent. siehe auch meinen Beitrag zu diesem Thema:
http://forum.hibernate.org/viewtopic.php?t=950900

die Ursache ist die selbe: das Objekt konnte zwar in die Datenbank nicht gespeichert werden, in die Sitzung wurde es aber durch den Aufruf von Save gespeichert, und die doppelte Speicherung eines Objekts in eine Sitzung ist in Hibernate nicht möglich. Da hilft nur eins - sie Sitzung schließen, neue öffnen und in die neue Sitzung speichen. (oder die alte Sitzung mit dem "clear" leeren)


Top
 Profile  
 
 Post subject:
PostPosted: Fri Feb 24, 2006 8:01 am 
Newbie

Joined: Wed Dec 07, 2005 8:20 am
Posts: 10
Hmm...

ich habe an diesem Problem nicht mehr weiter gearbeitet...

aber sw79... danke für deine Hinweis...
das könnte die ursache sein, dass die Session noch offen bleibt...


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 7 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.