[jboss-user] [EJB 3.0] - ManyToMany problem

andydale do-not-reply at jboss.com
Tue Aug 15 02:51:28 EDT 2006


I am currently trying to implement a really simple many to many relationship using students and courses, but i cannot get it to work.  The error always seems to be with the Collection in the none owning side of the relationship.

Below are the exceptions i get:
anonymous wrote : 
  | 17:01:06,300 INFO  [Ejb3Configuration] Processing PersistenceUnitInfo [
  |         name: test
  |         ...]
  | 17:01:06,302 INFO  [Ejb3Configuration] found EJB3 Entity bean: test.Course
  | 17:01:06,307 INFO  [Ejb3Configuration] found EJB3 Entity bean: test.Student
  | 17:01:06,307 WARN  [Ejb3Configuration] Persistence provider caller does not implements the EJB3 spec correctly. PersistenceUnitInfo.getNewTempClassLoader() is null.
  | 17:01:06,309 INFO  [Configuration] Reading mappings from resource: META-INF/orm.xml
  | 17:01:06,309 INFO  [Ejb3Configuration] [PersistenceUnit: test] no META-INF/orm.xml found
  | 17:01:06,311 INFO  [AnnotationBinder] Binding entity from annotated class: test.Course
  | 17:01:06,312 INFO  [EntityBinder] Bind entity test.Course on table course
  | 17:01:06,312 WARN  [AnnotationBinder] Hibernate does not support SequenceGenerator.initialValue()
  | 17:01:06,322 INFO  [AnnotationBinder] Binding entity from annotated class: test.Student
  | 17:01:06,322 INFO  [EntityBinder] Bind entity test.Student on table student
  | 17:01:06,323 WARN  [AnnotationBinder] Hibernate does not support SequenceGenerator.initialValue()
  | 17:01:06,368 WARN  [ServiceController] Problem starting service persistence.units:ear=TestRelationships.ear,jar=TestRelationshipsEJB.jar,unitName=test
  | org.hibernate.MappingException: Could not determine type for: java.util.Collection, for columns: [org.hibernate.mapping.Column(mCoursesEnrolledOn)]
  |         at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:266)
  |         at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:253)
  |         at org.hibernate.mapping.Property.isValid(Property.java:185)
  |         at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:395)
  |         at org.hibernate.mapping.RootClass.validate(RootClass.java:192)
  |         at org.hibernate.cfg.Configuration.validate(Configuration.java:1021)
  |         at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1206)
  |         at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:631)
  |         at org.hibernate.ejb.Ejb3Configuration.createEntityManagerFactory(Ejb3Configuration.java:760)
  |         at org.hibernate.ejb.Ejb3Configuration.createContainerEntityManagerFactory(Ejb3Configuration.java:350)
  |         at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:119)
  |         at org.jboss.ejb3.entity.PersistenceUnitDeployment.start(PersistenceUnitDeployment.java:264)
  |         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.ejb3.ServiceDelegateWrapper.startService(ServiceDelegateWrapper.java:99)
  |         at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289)
  |         at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:245)
  |         at sun.reflect.GeneratedMethodAccessor3.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:155)
  |         at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
  |         at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
  |         at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
  |         at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
  |         at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978)
  |         at $Proxy0.start(Unknown Source)
  |         at org.jboss.system.ServiceController.start(ServiceController.java:417)
  |         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:155)
  |         at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
  |         at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
  |         at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
  |         at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
  |         at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
  |         at $Proxy120.start(Unknown Source)
  |         at org.jboss.ejb3.JmxKernelAbstraction.install(JmxKernelAbstraction.java:82)
  |         at org.jboss.ejb3.Ejb3Deployment.startPersistenceUnits(Ejb3Deployment.java:626)
  |         at org.jboss.ejb3.Ejb3Deployment.start(Ejb3Deployment.java:475)
  |         at org.jboss.ejb3.Ejb3Module.startService(Ejb3Module.java:139)
  |         at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289)
  |         at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:245)
  |         at sun.reflect.GeneratedMethodAccessor3.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:155)
  |         at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
  |         at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
  |         at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
  |         at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
  |         at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978)
  |         at $Proxy0.start(Unknown Source)
  |         at org.jboss.system.ServiceController.start(ServiceController.java:417)
  |         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:155)
  |         at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
  |         at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
  |         at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
  |         at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
  |         at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
  |         at $Proxy41.start(Unknown Source)
  |         at org.jboss.ejb3.EJB3Deployer.start(EJB3Deployer.java:449)
  |         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:155)
  |         at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
  |         at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
  |         at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
  |         at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
  |         at org.jboss.mx.interceptor.DynamicInterceptor.invoke(DynamicInterceptor.java:97)
  |         at org.jboss.system.InterceptorServiceMBeanSupport.invokeNext(InterceptorServiceMBeanSupport.java:238)
  |         at org.jboss.ws.server.WebServiceDeployer.start(WebServiceDeployer.java:117)
  |         at org.jboss.deployment.SubDeployerInterceptorSupport$XMBeanInterceptor.start(SubDeployerInterceptorSupport.java:188)
  |         at org.jboss.deployment.SubDeployerInterceptor.invoke(SubDeployerInterceptor.java:95)
  |         at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
  |         at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
  |         at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
  |         at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
  |         at $Proxy42.start(Unknown Source)
  |         at org.jboss.deployment.MainDeployer.start(MainDeployer.java:1007)
  |         at org.jboss.deployment.MainDeployer.start(MainDeployer.java:997)
  |         at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:808)
  |         at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:771)
  |         at sun.reflect.GeneratedMethodAccessor10.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:155)
  |         at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
  |         at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
  |         at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
  |         at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
  |         at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
  |         at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
  |         at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
  |         at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
  |         at $Proxy6.deploy(Unknown Source)
  |         at org.jboss.deployment.scanner.URLDeploymentScanner.deploy(URLDeploymentScanner.java:421)
  |         at org.jboss.deployment.scanner.URLDeploymentScanner.scan(URLDeploymentScanner.java:610)
  |         at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.doScan(AbstractDeploymentScanner.java:263)
  |         at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.loop(AbstractDeploymentScanner.java:274)
  |         at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.run(AbstractDeploymentScanner.java:225)
  | 17:01:06,402 INFO  [JmxKernelAbstraction] installing MBean: jboss.j2ee:ear=TestRelationships.ear,jar=TestRelationshipsEJB.jar,name=RelationTestBean,service=EJB3 with dependencies:
  | 17:01:06,402 INFO  [JmxKernelAbstraction]       persistence.units:ear=TestRelationships.ear,jar=TestRelationshipsEJB.jar,unitName=test
  | 17:01:06,405 INFO  [EJB3Deployer] Deployed: file:/usr/local/jboss-4.0.4.GA/server/default/tmp/deploy/tmp56627TestRelationships.ear-contents/TestRelationshipsEJB.jar
  | 17:01:06,407 INFO  [EARDeployer] Started J2EE application: file:/usr/local/jboss-4.0.4.GA/server/default/deploy/TestRelationships.ear
  | 17:01:06,410 ERROR [URLDeploymentScanner] Incomplete Deployment listing:
  | 
  | --- MBeans waiting for other MBeans ---
  | ObjectName: persistence.units:ear=TestRelationships.ear,jar=TestRelationshipsEJB.jar,unitName=test
  |   State: FAILED
  |   Reason: org.hibernate.MappingException: Could not determine type for: java.util.Collection, for columns: [org.hibernate.mapping.Column(mCoursesEnrolledOn)]
  |   I Depend On:
  |     jboss.jca:service=ManagedConnectionFactory,name=Postgres_Test
  |   Depends On Me:
  |     jboss.j2ee:ear=TestRelationships.ear,jar=TestRelationshipsEJB.jar,name=RelationTestBean,service=EJB3
  | 
  | ObjectName: jboss.j2ee:ear=TestRelationships.ear,jar=TestRelationshipsEJB.jar,name=RelationTestBean,service=EJB3
  |   State: NOTYETINSTALLED
  |   I Depend On:
  |     persistence.units:ear=TestRelationships.ear,jar=TestRelationshipsEJB.jar,unitName=test
  | 
  | --- MBEANS THAT ARE THE ROOT CAUSE OF THE PROBLEM ---
  | ObjectName: persistence.units:ear=TestRelationships.ear,jar=TestRelationshipsEJB.jar,unitName=test
  |   State: FAILED
  |   Reason: org.hibernate.MappingException: Could not determine type for: java.util.Collection, for columns: [org.hibernate.mapping.Column(mCoursesEnrolledOn)]
  |   I Depend On:
  |     jboss.jca:service=ManagedConnectionFactory,name=Postgres_Test
  |   Depends On Me:
  |     jboss.j2ee:ear=TestRelationships.ear,jar=TestRelationshipsEJB.jar,name=RelationTestBean,service=EJB3
  | 


Here is the relevant contents of Course.java

  |     /**
  |      * The list of student's enrolled on the course.
  |      */
  |     private Set < Student > mEnrolledStudents = new HashSet < Student >();
  |     .......
  | 
  |     /**
  |      * Return the students enrolled on the course.
  |      * @return mEnrolledStudents student's
  |      */
  |     @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.EAGER)
  |     @JoinTable(name = "course_student",
  |                 joinColumns = {@JoinColumn(name = "course_id") },
  |                 inverseJoinColumns = {@JoinColumn(name = "student_id") })
  |     public Set < Student > getStudents() {
  |         return mEnrolledStudents;
  |     }
  | 
  | 
  |     /**
  |      * Set the students enrolled on this course.
  |      * @param pEnrolledStudents students
  |      */
  |     public void setStudents(final Set < Student > pEnrolledStudents) {
  |         this.mEnrolledStudents = pEnrolledStudents;
  |     }
  | 

And the relevant contents in Student.java

  |     /**
  |      * The list of the course the student is enrolled on.
  |      */
  |     private Collection < Course > mCoursesEnrolledOn = new ArrayList < Course >();
  |    ......
  |    /**
  |      * Return the courses the student is enrolled on.
  |      * @return mCoursesEnrolledOn courses
  |      */
  |     @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE }, mappedBy = "mEnrolledStudents")
  |     public Collection < Course > getCourses() {
  |         return mCoursesEnrolledOn;
  |     }
  | 
  | 
  |     /**
  |      * Set the courses the student is enrolled on.
  |      * @param pCoursesEnrolledOn courses
  |      */
  |     public void setCourses(final Collection < Course > pCoursesEnrolledOn) {
  |         this.mCoursesEnrolledOn = pCoursesEnrolledOn;
  |     }
  | 

I cannot understand what is wrong with my code as it is the same as all the EJB 3 examples i have seen, and read (O'Reilly Enterprise Java Beans 3.0). Do i have to decalre the the JoinTable in both Entities as I found an older example that said that (Jan 2005), but i think you don't need to now.

Can anyone offer me any advice ?

Thanks in advance,

Andy

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

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



More information about the jboss-user mailing list