-->
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.  [ 4 posts ] 
Author Message
 Post subject: Session
PostPosted: Thu May 03, 2007 6:41 am 
Newbie

Joined: Tue Oct 31, 2006 5:12 pm
Posts: 9
Hibernate version: 3.1

Hi,

Ich habe ein kleines Problem mit der Session.


Und zwar:

Code:
@Entry
public class Table1 implements Serializable{
   @Id...
   private Long id;
   @Colum(length = 100)
   private String title;

   @ManyToOne
   private Table2 table2;
   ...
   ...
}

@Entry
public class Table2 implements Serializable{
   @Id...
   private Long id;
   @Colum(length = 100)
   private String title;

   @OneToMany(mappedBy = "table2")
   private List table1s = new ArrayList();
   ...
   ...
}


Das sind meine beiden Tabellen.

Nun mache ich folgendes:

Code:
HibernateUtil.beginTransaction();
//Table2 aus DB
Table2 table2 = hibernateUtil.getSession().get(Table2.cass, id);

for(Table1 table1 : table2.getTable1s()){
   table1.setTitle("bla");
   HibernateUtil.getSession().saveOrUpdate(table1);
   HibernateUtil.getSession().flush();// hat keine Wirkung
}

//jetzt ist in der DB die werte geändert
//neu laden der Tabelle
Table2 table2 = hibernateUtil.getSession().get(Table2.cass, id);
for(Table1 table1 : table2.getTable1s()){
   System.out.println(table1.getTitle());
   //hier schreibt er nicht den neuen wert "bla" sondern den alten wert aus
}
HibernateUtil.endTransaction();

//erst wenn ich die Session schliesse und neu öffne holt Hibernate die neuen werte richtig.

Wie kann ich Hibernate dazu bringen die neuen Werte in der obigen Session zu laden?

MfG


Code:
Code:
Code:


Top
 Profile  
 
 Post subject:
PostPosted: Thu May 03, 2007 6:52 am 
Regular
Regular

Joined: Thu Jan 27, 2005 8:58 am
Posts: 80
HI, was Du hast ist ein simples Transactionsproblem. Wenn Du über Hibernate Daten änderst, so werden diese zunächst im Cache geändert und auch nur für Deine Transaction! DU musst wie bei Plain-SQL am Ende einer Transaction ein Commit senden!

_________________
Weise ist nicht, wer viele Erfahrungen macht, sondern wer aus wenigen lernt, viele nicht machen zu müssen. (Karlheinz Deschner)


Top
 Profile  
 
 Post subject:
PostPosted: Mon May 07, 2007 4:22 pm 
Newbie

Joined: Tue Oct 31, 2006 5:12 pm
Posts: 9
danke für die Antwort.

Ich habe vergessen zu erwähnen, dass es sich dabei um "Open Session in View" handelt und die Transaction vom Filter gemanagt wird. Gibt es da noch andere Möglichkeiten?


Top
 Profile  
 
 Post subject:
PostPosted: Tue May 08, 2007 5:25 am 
Regular
Regular

Joined: Thu Jan 27, 2005 8:58 am
Posts: 80
Nun dann muss Dein Filter die Session nach jeder Abarbeitung des requests comitten. Dies wäre auch der Weg der in der Referenz-Dokumentation beschrieben wird.
Aus dieser Doku habe ich auch mein Session und Transaction-Management übernommen.
In meinem fall handelt es sich um eine Web-Anwendung, die einen zentralen Filter verwendet. Dieser comittet nach jedem abgearbeiten request meine Transaction.
Dies hat mehrere Vorteile:
1.) Das Comitt erfolgt an einer zentralen Stelle
2.) Es zwingt Dich sehr sauber mit Deinen Objekten zu arbeiten, da sonst ungewollte Änderungen direkt in die DB übernommen werden

Die Session und die Transaction halte ich mir übrigens in jeweils einem ThreadLocal. So kann ich sie statisch ansprechen und sie sind trotzdem individuell.

_________________
Weise ist nicht, wer viele Erfahrungen macht, sondern wer aus wenigen lernt, viele nicht machen zu müssen. (Karlheinz Deschner)


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 4 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.