[jboss-user] [EJB 3.0] - Generics and Composite Keys

jimk1723 do-not-reply at jboss.com
Thu Feb 15 19:05:53 EST 2007


I have a situation where a set of entities share a similar composite key class; rather than create a new PK class for each entity, I wanted to genericise the PK.

Here's my generic PK class:


  | @Embeddable
  | public class LanguagePK<T> implements Serializable {
  | 
  |     private T describes;
  | 
  |     private String code;
  | 
  |     @Column(name = "LANG_CODE")
  |     public String getCode() {
  |         return this.code;
  |     }
  | 
  |     public void setCode(String code) {
  |         this.code = code;
  |     }
  | 
  |     public T getDescribes() {
  |         return this.describes;
  |     }
  | 
  |     public void setDescribes(T described) {
  |         this.describes = described;
  |     }
  | }
  | 

...and here's a sample entity that embeds it (Foo is another entity)


  | @Entity
  | @Table(name = "FOO_LANG")
  | public class FooLanguage implements Serializable{
  |     LanguagePK<Foo> pk;
  | 
  |     @EmbeddedId()
  |     @AttributeOverrides( { @AttributeOverride(name = "describes", column = @Column(name = "FOO_ID")) })
  |     public LanguagePK<Foo> getPk() {
  | 
  |         if (pk == null) {
  |             pk = new LanguagePK<Foo>();
  |         }
  | 
  |         return pk;
  |     }
  | 
  |     public void setPk(LanguagePK<Foo> pk) {
  |         this.pk = pk;
  |     }
  | 
  |     @Transient
  |     public Foo getFoo() {
  |         return getPk().getDescribes();
  |     }
  | 
  |     public void setFoo(Foo e) {
  |         getPk().setDescribes(e);
  |     }
  | 
  |     @Transient
  |     public String getCode() {
  |         return getPk().getCode();
  |     }
  | 
  |     public void setCode(String code) {
  |         getPk().setCode(code);
  |     }
  | }
  | 

I'm getting the "Property X has an unbound type and no explicit target entity" exception when I try to use it.


  |    [testng] javax.persistence.PersistenceException: java.lang.IllegalStateException: Property describes has an unbound type and no explicit target entity.
  |    [testng] at org.hibernate.ejb.Ejb3Configuration.createEntityManagerFactory(Ejb3Configuration.java:217)
  |    [testng] at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:114)
  |    [testng] at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:37)
  |    [testng] at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:27)
  | 

I've poked around, but I haven't found any example code on how to do something like this. Am I'm trying to do something I shouldn't?

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4017317#4017317

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4017317



More information about the jboss-user mailing list