Composite Pattern & EJB3 mapping problem
jeannenot Sep 15, 2005 5:58 AMHello,
I've tried to implement composite pattern with EJB3, but it seems impossible.
This is my code :
1- parent class
@Entity @Table(name = "groupesetediteurs") @Inheritance(strategy = InheritanceType.JOINED) public abstract class EGroupesEtEditeurs implements Serializable { protected boolean isroot = false; private String nom = null; private List<EGroupesEtEditeurs> groupesEtEditeurs = new ArrayList<EGroupesEtEditeurs>(); private int id; @Id(generate = GeneratorType.AUTO) public int getId() { return id; } public void setId(int id) { this.id = id; } public void add(EGroupesEtEditeurs ge) { this.groupesEtEditeurs.add(ge); } public void del(EGroupesEtEditeurs ge) throws Exception { this.groupesEtEditeurs.remove(ge); } public void setNom(String nom){ this.nom = nom; } private void setRoot(boolean isroot) { this.isroot = isroot; } public String getNom() { return nom; } @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER) @JoinTable( table=@Table(name="GroupesEditeurs"), joinColumns = { @JoinColumn( name="parent_id") }, inverseJoinColumns = @JoinColumn( name="enfant_id") ) public List<EGroupesEtEditeurs> getGroupesEtEditeurs(){ return groupesEtEditeurs; } private void setGroupesEtEditeurs(List<EGroupesEtEditeurs> groupesEtEditeurs) { this.groupesEtEditeurs = groupesEtEditeurs; } public boolean isRoot() { return isroot; } }
2- node class
@Entity @Table(name = "groupedepresse") public class EGroupeDePresse extends EGroupesEtEditeurs { public EGroupeDePresse() {} public EGroupeDePresse(String nom) throws Exception { this.setNom(nom); } public void add(EGroupesEtEditeurs ge) throws Exception { super.add(ge); } public void del(EGroupesEtEditeurs ge) throws Exception { super.del(ge); } public void setNom(String nom){ super.setNom(nom); } public String getNom() { return super.getNom(); } public List<EGroupesEtEditeurs> getGroupesEtEditeurs(){ return super.getGroupesEtEditeurs(); } public void makeRoot(){ this.isroot = true; } public boolean isRoot() { return super.isroot; } }
3- Leaf class
@Entity @Table(name = "editeur") public class EEditeur extends EGroupesEtEditeurs implements Serializable{ private List<ETitre> titres = new ArrayList<ETitre>(); private ArrayList interlocuteurs = new ArrayList(); public EEditeur() {} public EEditeur(String nom) throws Exception { this.setNom(nom); } public void add(EGroupesEtEditeurs ge) throws Exception { throw new Exception( "Un Editeur ne peut pas posséder de Groupes ou d'Editeurs"); } public void del(EGroupesEtEditeurs ge) throws Exception { throw new Exception( "Un Editeur ne peut pas posséder de Groupes ou d'Editeurs"); } public String getNom() { return super.getNom(); } public void setNom(String nom){ super.setNom(nom); } public List<EGroupesEtEditeurs> getGroupesEtEditeurs(){ return super.getGroupesEtEditeurs(); } public boolean isRoot() { return false; } @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER) @JoinTable( table=@Table(name="EditeurTitres"), joinColumns = { @JoinColumn( name="editeur_id") }, inverseJoinColumns = @JoinColumn( name="titre_id") ) public List<ETitre> getTitres() { return titres; } public void setTitres(List<ETitre> titres) { this.titres = titres; } public void addTitre(ETitre titre) { //ETitre.validation(titre); this.titres.add(titre); } public void delTitre(ETitre titre) { this.titres.remove(titre); } }
4- and the error trace
WARN [ServiceController] Problem creating service jboss.j2ee:service=EJB3,module=entites-produits.par org.hibernate.MappingException: Could not determine type for: java.util.List, for columns: [org.hibernate.mapping.Column(groupesEtEditeurs)] at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:265) at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:252) at org.hibernate.mapping.Property.isValid(Property.java:175) at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:330) at org.hibernate.mapping.JoinedSubclass.validate(JoinedSubclass.java:38) at org.hibernate.cfg.Configuration.validate(Configuration.java:815) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:976) at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:178) at org.jboss.ejb3.entity.EntityManagerFactoryLoader.loadFactory(EntityManagerFactoryLoader.java:44) at org.jboss.ejb3.entity.EntityManagerFactoryLoader.loadFactory(EntityManagerFactoryLoader.java:31) at org.jboss.ejb3.Ejb3Module.initializeManagedEntityManagerFactory(Ejb3Module.java:290) at org.jboss.ejb3.Ejb3Module.createService(Ejb3Module.java:141) at org.jboss.system.ServiceMBeanSupport.jbossInternalCreate(ServiceMBeanSupport.java:233) at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:215) at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:141) at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80) at org.jboss.mx.server.Invocation.invoke(Invocation.java:72) at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:245) at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:644) at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:950) at $Proxy0.create(Unknown Source) at org.jboss.system.ServiceController.create(ServiceController.java:342) at org.jboss.system.ServiceController.create(ServiceController.java:281) at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:141) at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80) at org.jboss.mx.server.Invocation.invoke(Invocation.java:72) at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:245) at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:644) at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:176) at $Proxy10.create(Unknown Source) at org.jboss.ejb3.EJB3Deployer.create(EJB3Deployer.java:157) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:141) at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80) at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:118) at org.jboss.mx.server.Invocation.invoke(Invocation.java:74) at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:127) at org.jboss.mx.interceptor.DynamicInterceptor.invoke(DynamicInterceptor.java:80) at org.jboss.mx.server.Invocation.invoke(Invocation.java:74) at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:245) at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:644) at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:176) at $Proxy11.create(Unknown Source) at org.jboss.deployment.MainDeployer.create(MainDeployer.java:919) at org.jboss.deployment.MainDeployer.create(MainDeployer.java:909) at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:773) at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:737) at sun.reflect.GeneratedMethodAccessor8.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:141) at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80) at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:118) at org.jboss.mx.server.Invocation.invoke(Invocation.java:74) at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:127) at org.jboss.mx.server.Invocation.invoke(Invocation.java:74) at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:245) at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:644) at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:176) at $Proxy6.deploy(Unknown Source) at org.jboss.deployment.scanner.URLDeploymentScanner.deploy(URLDeploymentScanner.java:325) at org.jboss.deployment.scanner.URLDeploymentScanner.scan(URLDeploymentScanner.java:501) at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.doScan(AbstractDeploymentScanner.java:204) at org.jboss.deployment.scanner.AbstractDeploymentScanner.startService(AbstractDeploymentScanner.java:277) at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:267) at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:217) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:141) at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80) at org.jboss.mx.server.Invocation.invoke(Invocation.java:72) at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:245) at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:644) at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:950) at $Proxy0.start(Unknown Source) at org.jboss.system.ServiceController.start(ServiceController.java:436) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:141) at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80) at org.jboss.mx.server.Invocation.invoke(Invocation.java:72) at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:245) at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:644) at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:176) at $Proxy4.start(Unknown Source) at org.jboss.deployment.SARDeployer.start(SARDeployer.java:273) at org.jboss.deployment.MainDeployer.start(MainDeployer.java:973) at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:774) at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:737) at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:721) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:141) at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80) at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:118) at org.jboss.mx.server.Invocation.invoke(Invocation.java:74) at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:127) at org.jboss.mx.server.Invocation.invoke(Invocation.java:74) at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:245) at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:644) at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:176) at $Proxy5.deploy(Unknown Source) at org.jboss.system.server.ServerImpl.doStart(ServerImpl.java:434) at org.jboss.system.server.ServerImpl.start(ServerImpl.java:315) at org.jboss.Main.boot(Main.java:195) at org.jboss.Main$1.run(Main.java:463)
Thank you for your help !