[jboss-user] [EJB 3.0] New message: "Weird usage of @ElementCollection"

Juergen Zimmermann do-not-reply at jboss.com
Fri Feb 5 02:34:25 EST 2010


User development,

A new message was posted in the thread "Weird usage of @ElementCollection":

http://community.jboss.org/message/524306#524306

Author  : Juergen Zimmermann
Profile : http://community.jboss.org/people/Juergen.Zimmermann

Message:
--------------------------------------------------------------
@ElementCollection is a new annotation of JPA 2, and is provided by Hibernate 3.5-beta4. I tried to use this feature in an entity class:
 
@Entity
public class Customer implements Serializable {
   @Id
   ...
   @ElementCollection(fetch=EAGER)
   @CollectionTable(name="customer_code", http://community.jboss.org/mailto:joinColumns=@JoinColumn(name="customer_fk"))
   @Column(name="code_fk")
   private Set<Integer> codes;
}
 
However, the concrete type of attribute "codes" is Hibernate's PersistentSet, so that "codes" cannot be updated outside of a transaction, e.g. via checkboxes in JSF based pages. Therefore, I extended the entity class:
 
@Entity
public class Customer implements Serializable {
   @Id
   ...
   @ElementCollection(fetch=EAGER)
   @CollectionTable(name="customer_code", http://community.jboss.org/mailto:joinColumns=@JoinColumn(name=&quot;customer_fk"))
   @Column(name="code_fk")
   private Set<Integer> codesDB;
 
   @Transient
   private Set<Integer> codesUI;
}
 
Now, I can update the transient attribute codesUI in the JSF pages. But, new problems arrived:
a) "codesUI" CANNOT be instantiated via +*@PostLoad*+ when reading a Customer object from the database - maybe because codesDB is considered as an association. OK, so I extended the get method for codesUI to instantiate it from codesDB.
b) "codesDB" CAN be instantiated by *+ at PrePersist+* when persisting a new Customer object via EntityManager.persist(). Fine.
c) "codesDB" CANNOT be updated by *+ at PreUpdate+* when an existing Customer object is updated via EntityManager.merge(). When the @PreUpdate method is invoked the "codesUI" attribute suddenly is null. Thus for updates I have to modify my DAO method, but for new creations everything works fine through @PrePersist...
 
Any hint or comment is highly appreciated!

--------------------------------------------------------------

To reply to this message visit the message page: http://community.jboss.org/message/524306#524306




More information about the jboss-user mailing list