-->
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.  [ 17 posts ]  Go to page 1, 2  Next
Author Message
 Post subject: Neue Variablen initialisieren, Interceptors?
PostPosted: Mon Feb 22, 2010 4:21 am 
Beginner
Beginner

Joined: Mon Jan 04, 2010 2:52 pm
Posts: 30
hallo,

wenn sich in meinem Projekt die persistenten Klassen ändern, dann füge ich im Moment ein Objekt
statt einem primitiven Typ hinzu (z.B. Double statt double), damit Hibernate das Feld mit null
füllt anstatt eine Fehlermeldung auszugeben, dass er das Feld in der DB nicht findet.

Nun brauche ich noch einen Weg, damit das neue Feld statt null einen sinnvollen Wert bekommt.
Ich habe probiert, das Feld im leeren Konstruktor von hibernate zu setzen, aber dann wird
es beim Laden wieder mit "[null]" (wenn das Feld ein String ist) überschrieben.

Gibt es eine einfache Möglichkeit, für jede Klasse Code nach dem Laden auszuführen?

Ich habe folgendes Beispiel für Lifecycle-Operationen gefunden:
http://www.javabeat.net/articles/9-inte ... cti-2.html
Allerdings ist onLoad() zu früh, und onSave() zu spät :-(

Vielen Dank!


Top
 Profile  
 
 Post subject: Re: Neue Variablen initialisieren, Interceptors?
PostPosted: Thu Feb 25, 2010 4:22 am 
Expert
Expert

Joined: Tue Jun 16, 2009 3:36 am
Posts: 990
Versuche es mit @PostLoad
Ist @PostLoad fuer Dich auch noch zu frueh?


Top
 Profile  
 
 Post subject: Re: Neue Variablen initialisieren, Interceptors?
PostPosted: Thu Feb 25, 2010 4:32 am 
Beginner
Beginner

Joined: Mon Jan 04, 2010 2:52 pm
Posts: 30
hallo,

@PostLoad sieht super aus, vielen Dank!


Top
 Profile  
 
 Post subject: Re: Neue Variablen initialisieren, Interceptors?
PostPosted: Thu Feb 25, 2010 5:10 am 
Beginner
Beginner

Joined: Mon Jan 04, 2010 2:52 pm
Posts: 30
hallo nochmal,

ich habe das mal probiert: in einer Entityklasse das hier eingefügt:

@PostLoad
public void debug() {
System.exit(1);
}

Aber die Methode wird nie aufgerufen.

Danke,


Top
 Profile  
 
 Post subject: Re: Neue Variablen initialisieren, Interceptors?
PostPosted: Thu Feb 25, 2010 5:42 am 
Expert
Expert

Joined: Tue Jun 16, 2009 3:36 am
Posts: 990
Damit die Annotationen von Hibernate beruecksichtigt werden, musst Du
AnnotationConfiguration oder JPA (javax.persistence.Persistence.createEntityManagerFactory()) verwenden.
Ich glaube mit dem alten Ansatz werden die Annotations nicht geparst.


Top
 Profile  
 
 Post subject: Re: Neue Variablen initialisieren, Interceptors?
PostPosted: Thu Feb 25, 2010 7:49 am 
Beginner
Beginner

Joined: Mon Jan 04, 2010 2:52 pm
Posts: 30
ich benutze schon AnnotationConfiguration, und die anderen Annotations funktionieren.


Top
 Profile  
 
 Post subject: Re: Neue Variablen initialisieren, Interceptors?
PostPosted: Thu Feb 25, 2010 8:44 am 
Expert
Expert

Joined: Tue Jun 16, 2009 3:36 am
Posts: 990
Quote:
Aber die Methode wird nie aufgerufen.


Bist Du Dir sicher, dass die Instanz auch tatsaechlich neu geladen wird ?
Wie sieht denn dein Code aus?


Top
 Profile  
 
 Post subject: Re: Neue Variablen initialisieren, Interceptors?
PostPosted: Thu Feb 25, 2010 10:24 am 
Beginner
Beginner

Joined: Mon Jan 04, 2010 2:52 pm
Posts: 30
hallo,

Das Projekt wird so gespeichert (prj ist eine Instanz von Project):
Code:
            Session session = sessionFactory.openSession();
            Transaction tx = session.beginTransaction();
            session.saveOrUpdate(prj);
            tx.commit();
            session.connection().createStatement().execute("CHECKPOINT");
            session.close();


und die annotierte lifecycle Methode sieht so aus:
Code:
   @PostLoad
   public void debug() {
      System.exit(1);
   }


Danke,


Top
 Profile  
 
 Post subject: Re: Neue Variablen initialisieren, Interceptors?
PostPosted: Thu Feb 25, 2010 10:29 am 
Expert
Expert

Joined: Tue Jun 16, 2009 3:36 am
Posts: 990
Wie vermutet, laedts Du die Instanz ja gar nicht in diesem Code-Teil, du 'persistierst' (insert) sie lediglich.
Willst Du auch ein callback beim Persistieren, dann musst Du die methode auch mit @PostPersist 'annotieren'.


Top
 Profile  
 
 Post subject: Re: Neue Variablen initialisieren, Interceptors?
PostPosted: Thu Feb 25, 2010 10:31 am 
Expert
Expert

Joined: Tue Jun 16, 2009 3:36 am
Posts: 990
Quote:
Willst Du auch ein callback beim Persistieren, dann musst Du die methode auch mit @PostPersist 'annotieren'.

Oder @PrePersist , falls Du noch vor dem insert was zurechtbiegen moechtest.


Top
 Profile  
 
 Post subject: Re: Neue Variablen initialisieren, Interceptors?
PostPosted: Thu Feb 25, 2010 10:50 am 
Beginner
Beginner

Joined: Mon Jan 04, 2010 2:52 pm
Posts: 30
Sorry, ich habe natürlich auch Code zum Laden in der Klasse:

Statische Methode in Project:
Code:
      Project prj;
      try {
         prj = (Project)session.get(Project.class, 1L);
      }
               [...]


Top
 Profile  
 
 Post subject: Re: Neue Variablen initialisieren, Interceptors?
PostPosted: Thu Feb 25, 2010 11:23 am 
Expert
Expert

Joined: Tue Jun 16, 2009 3:36 am
Posts: 990
Code:
prj = (Project)session.get(Project.class, 1L);


loest nicht unbedingt eine load-action aus und zwar wenn das betreffende object bereits im persistenz-contect vorhanden ist.
Mach zur Sicherheit mal test-weise das session.get(Project.class, 1L) mit einer neuen Session...


Top
 Profile  
 
 Post subject: Re: Neue Variablen initialisieren, Interceptors?
PostPosted: Thu Feb 25, 2010 12:01 pm 
Beginner
Beginner

Joined: Mon Jan 04, 2010 2:52 pm
Posts: 30
hallo,

ich habe den Code direkt nach dem Starten der Anwendung ausgeführt, da war
das Projekt garantiert noch nicht geladen. Es gibt auch nur für das load eine session:

Code:
      Session session = sessionFactory.openSession();
      Project prj;
      try {
         prj = (Project)session.get(Project.class, 1L);
      }
      session.close();


Danke,


Top
 Profile  
 
 Post subject: Re: Neue Variablen initialisieren, Interceptors?
PostPosted: Thu Feb 25, 2010 12:12 pm 
Expert
Expert

Joined: Tue Jun 16, 2009 3:36 am
Posts: 990
Dann bin ich mit meinem Latein leider auch am Ende ....


Top
 Profile  
 
 Post subject: Re: Neue Variablen initialisieren, Interceptors?
PostPosted: Fri Feb 26, 2010 7:01 am 
Expert
Expert

Joined: Tue Jun 16, 2009 3:36 am
Posts: 990
Kann es sein, dass Du lediglich vergessen hast alles neu zu compilieren?


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 17 posts ]  Go to page 1, 2  Next

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.