-->
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.  [ 1 post ] 
Author Message
 Post subject: PropertyChangeEvents bei Sets
PostPosted: Tue Oct 11, 2005 2:43 pm 
Newbie

Joined: Mon Oct 10, 2005 6:10 am
Posts: 10
Hibernate version:
3.0.5
Pseudocode:
Code:
class Customer  {
 
  private String name;
  private Set orders;
  ...
   public void setName(String name){
      notifyListener(...);
      this.name = name;
   }

   public void getName() { ...}

   public void setOrders(Set orders){
       notifyListener(...);
       this.orders = orders;
   }

   public void addChangeListener(Listener listener){
   ... listenerlist.add(listener);
   }

   private void notifiyListener(){
   ... for each listener in listenerlist: notify(...)
   }
}

class Order {
   
    ...
}



Pseudomapping
Code:
<class name="Customer" ....
    ...
    <property name="name" .../>
    <set name="orders" table="n_m" lazy="false">
       <key column="customer_id"/>
       <many-to-many class="Order" column="order_id"/>
    </set>
    ...
</class>
<class name="Order" .... >
...
</class>


Hallo,

ich moechte fuer meine POJOs einen PropertChange-Event anbieten, der auch auf Hibernate-Aktivitaeten reagiert. D.h. wenn Hibernate Attribute einer existierenden Instanz aendert (wie beim session.refresh(...) ), dann sollte dies einen Event ausloesen.

Im Beispiel-Code ist eine m:n-Beziehung zwischen Customer und Order skizziert. Beliebige Interessenten können sich als ChangeListener bei individuellen Instanzen von Customer eintragen.
Die Benachrichtigung sollte bei einfachen Attributen sicherlich funktionieren, doch weiss ich nicht, wie es sich mit Sets (java.util.Set) verhaelt. Hibernate uebergibt natuerlich eine Realisierung von java.util.Set beim Aufruf von setOrders(java.util.Set order), doch kann ich mich auf dem Set selbst nicht als ChangeListener eintragen. Insbesondere bin ich an ChangeEvents im Set selbst interessiert, die u.a. auch durch Hibernate ausgeloest werden. Zum Beispiel beim Aufruf von session.refresh(customerA) koennte sich ja durchaus die Menge der assoziierten Ordereintraege im Set aendern ohne dass das Set selbst ausgetauscht wird (in Customer)

Haette ich die Moeglichkeit, das Set selbst zu implementieren, dann koennte ich einfach vor jedem Aufruf wie zum Beispiel .add(...), .remove(...), etc. den Notificication-Code einfuegen. Das Set wird jedoch von Hibernate geliefert (siehe org.hibernate.collection.*)

Erste Experimente ergaben, dass Hibernate auch beim Aufruf von session.refresh(customerA) das Set an sich (setOrders(...)) neu uebergibt, doch weiss ich nicht, ob ich mich darauf verlassen kann.

Auf Tipps, an welcher Stelle ich mich am besten einniste bin ich sehr gespannt ... oder bin ich schon so code-blind und versuche ein No-Problem zu loesen ;-)


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

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.