[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