Hibernate - Heavy Object in WHERE Klausel

DonChiechot

Grünschnabel
Hallo Community,

ich bräuchte mal wieder eure Hilfe. Folgendes Problem:

Ich habe ein schwergewichtiges Objekt mit vielen Attributen und Assoziationen. Dieses Objekt dient als WHERE-Argument in einer Hibernate Abfrage um andere leicht gewichtige Objekte aus einer Datenbank zu lesen. Da beide Objekte in einer Bidirektionalen Beziehung stehen läd Hibernate nun für jedes leichtgewichtige Objekt auch das schwergewichtige Objekt neu.

Dieses Verhalten ist für mich aber nicht wünschenswert, da ich das schwergewichtige Objekt ja quasi schon vorliegen habe und ein Neuladen von Hibernate nur unnötige Performanceverluste herbeiruft. Um die Sache zu umgehen habe ich nun für das schwergewichtige Objekt lazy-loading aktiviert. Nach Hibernate meine neuen Objekte erstellt hat rufe ich dann auf allen Objekten eine entsprechende set-Methode auf um die Referenz vom schwergewichtigen Objekt quasi händisch zu übergeben. Funktioniert zwar, ist aber auch keine schöne Lösung...

Das ganze Dilemma hier nochmal in Codeform:
Java:
Session sess = null;
try {
     sess = PersistenceManager.getInstance().getSessionFactory().openSession();
     Criteria crit = sess.createCriteria(LightWeightObject.class)
                         .add(Restrictions.eq("heavyObject", this))
                         .addOrder(Order.asc("time"));
		      
     List logs = crit.list();
     // this is shit
     for (Object log : logs) {
              ((LightWeightObject)log).setHeavyObject(this);
     }
		      
} catch( HibernateException ex ) {
      ex.printStackTrace();
      throw new DAOException( ex.getMessage() );
} finally {
      try { if( sess != null ) sess.close(); } catch( Exception exCl ) {}
}

Gibt es eine Möglichkeit in Hibernate die bereits exisitierenden Objekte quasi statisch mit zu übergeben, sodass mein schwergewichtiges Objekt nicht ständig neu aus der Datenbank geladen wird?

Vielen Dank im Voraus!
 
Zurück