From: <no...@at...> - 2006-06-29 18:08:15
|
Exception raising : Strange behaviour depending on package names ---------------------------------------------------------------- Key: ANN-382 URL: http://opensource.atlassian.com/projects/hibernate/browse/ANN= -382 Project: Hibernate Annotations Type: Bug Environment: Hibernate's annotations packaged in JBoss EJB 3.0 RC8- FD Microsoft SQL Server 2000 Reporter: Pierre Four=C3=A8s Attachments: BugEJB3.zip As described in hibernate forum (http://forum.hibernate.org/viewtopic.php?t= =3D960763) and discussed with Emmanuel, I encounter a strange behaviour wit= h annotations depending of my package's names. Supposing hibernate load classes by package alphabetical order; if it get t= he "parent" class first all works fine, if it get the "child" class first, = it raise an exception !=20 Here is a subset of my classes, cleaned of getters, setters and all unrelat= ed things, then followed by the exception stack :=20 /////////////////////////////////////////////// package fr.ifis.entity.field.card; import java.io.Serializable; import javax.persistence.Embeddable; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.ManyToOne; import fr.ifis.entity.project.Card; @Entity public class CardField { @Id private PrimaryKey primaryKey =3D new PrimaryKey(); =20 // cardtmp is a trick used in order to wait for http://opensource.atlass= ian.com/projects/hibernate/browse/ANN-381 resolution=20 @ManyToOne private Card cardtmp; @Embeddable private class PrimaryKey implements Serializable { =20 @ManyToOne(optional =3D false) private Card card; =20 @ManyToOne(optional =3D false) private CardKey key; } }=20 /////////////////////////////////////////////// package fr.ifis.entity.field.card; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity public class CardKey { @Id @GeneratedValue private int id; }=20 /////////////////////////////////////////////// package fr.ifis.entity.project; import java.io.Serializable; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Embeddable; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import fr.ifis.entity.field.card.CardField; @Entity public class Card { @Id private CardPrimaryKey primaryKey =3D new CardPrimaryKey(); =20 @OneToMany(cascade=3DCascadeType.ALL, fetch=3DFetchType.EAGER, mappedBy= =3D"cardtmp") // private Set<CardField> fields; =20 @Embeddable private class CardPrimaryKey implements Serializable { =20 @ManyToOne(optional =3D false) private Project project; =20 //An other @ManyToOne is also present in the real model //The problem still occurs even when i remove this relation, it was n= o use to kept it for describe the problem } }=20 /////////////////////////////////////////////// package fr.ifis.entity.project; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity public class Project { @Id @GeneratedValue private int id; }=20 /////////////////////////////////////////////// [java] ERROR 29-06 19:42:18,272 (AbstractController.java:incrementStat= e:350) -Error installing to Start: name=3Dpersistence.units:unitName=3DRef= onte state=3DCreate [java] org.hibernate.MappingException: Foreign key (FK6771BFAA1845E8B:= CardField [])) must have same number of columns as the referenced primary k= ey (Card [project_id]) [java] at org.hibernate.mapping.ForeignKey.alignColumns(ForeignKey.jav= a:90) [java] at org.hibernate.mapping.ForeignKey.alignColumns(ForeignKey.jav= a:73) [java] at org.hibernate.cfg.Configuration.secondPassCompileForeignKeys= (Configuration.java:1182) [java] at org.hibernate.cfg.Configuration.secondPassCompile(Configurat= ion.java:1089) [java] at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(= AnnotationConfiguration.java:302) [java] at org.hibernate.cfg.Configuration.buildMappings(Configuration.= java:1034) [java] at org.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Config= uration.java:1015) [java] at org.hibernate.ejb.EventListenerConfigurator.configure(EventL= istenerConfigurator.java:154) [java] at org.hibernate.ejb.Ejb3Configuration.createEntityManagerFacto= ry(Ejb3Configuration.java:751) [java] at org.hibernate.ejb.Ejb3Configuration.createContainerEntityMan= agerFactory(Ejb3Configuration.java:350) [java] at org.hibernate.ejb.HibernatePersistence.createContainerEntity= ManagerFactory(HibernatePersistence.java:119) [java] at org.jboss.ejb3.entity.PersistenceUnitDeployment.start(Persis= tenceUnitDeployment.java:264) [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcce= ssorImpl.java:39) [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe= thodAccessorImpl.java:25) [java] at java.lang.reflect.Method.invoke(Method.java:585) [java] at org.jboss.reflect.plugins.introspection.ReflectionUtils.invo= ke(ReflectionUtils.java:55) [java] at org.jboss.reflect.plugins.introspection.ReflectMethodInfoImp= l.invoke(ReflectMethodInfoImpl.java:107) [java] at org.jboss.joinpoint.plugins.BasicMethodJoinPoint.dispatch(Ba= sicMethodJoinPoint.java:66) [java] at org.jboss.kernel.plugins.dependency.KernelControllerContextA= ctions.dispatchJoinPoint(KernelControllerContextActions.java:100) [java] at org.jboss.kernel.plugins.dependency.KernelControllerContextA= ctions$LifecycleAction.installAction(KernelControllerContextActions.java:58= 2) [java] at org.jboss.kernel.plugins.dependency.KernelControllerContextA= ctions$KernelControllerContextAction.install(KernelControllerContextActions= .java:175) [java] at org.jboss.dependency.plugins.AbstractControllerContextAction= s.install(AbstractControllerContextActions.java:51) [java] at org.jboss.dependency.plugins.AbstractControllerContext.insta= ll(AbstractControllerContext.java:226) [java] at org.jboss.dependency.plugins.AbstractController.install(Abst= ractController.java:593) [java] at org.jboss.dependency.plugins.AbstractController.incrementSta= te(AbstractController.java:346) [java] at org.jboss.dependency.plugins.AbstractController.resolveConte= xts(AbstractController.java:438) [java] at org.jboss.dependency.plugins.AbstractController.resolveConte= xts(AbstractController.java:379) [java] at org.jboss.dependency.plugins.AbstractController.install(Abst= ractController.java:225) [java] at org.jboss.dependency.plugins.AbstractController.install(Abst= ractController.java:151) [java] at org.jboss.kernel.plugins.dependency.AbstractKernelController= .install(AbstractKernelController.java:79) [java] at org.jboss.kernel.plugins.dependency.AbstractKernelController= .install(AbstractKernelController.java:73) [java] at org.jboss.ejb3.MCKernelAbstraction.install(MCKernelAbstracti= on.java:91) [java] at org.jboss.ejb3.Ejb3Deployment.startPersistenceUnits(Ejb3Depl= oyment.java:626) [java] at org.jboss.ejb3.Ejb3Deployment.start(Ejb3Deployment.java:475) [java] at org.jboss.ejb3.embedded.EJB3StandaloneDeployer.start(EJB3Sta= ndaloneDeployer.java:460) [java] at org.jboss.ejb3.embedded.EJB3StandaloneBootstrap.scanClasspat= h(EJB3StandaloneBootstrap.java:291) [java] at fr.ifis.Main.main(Unknown Source) /////////////////////////////////////////////// Indeed, depending on the package names I get or not an excpetion ! It doesn't work with the package fr.ifis.entity.project but if I rename the= package in fr.ifis.entity.aproject and then move it "before" the field.car= d package, all works fine. In order to facilitate the identification of the problem, I also include as= attachement the eclipse project of this problem repport. In order to keep reasonable the size of the attachement, I did not included= the libraries nor the configuration files for launch ejb3-embedded. Thoses= files are issued from the project simple-deployment included in JBoss EJB = 3.0 RC8-FD. The only change i've done was to specify in embedded-jboss-bean= s.xml the properties of my database. Regards, Pierre. --=20 This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators= .jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |
From: Emmanuel B. (JIRA) <no...@at...> - 2006-07-28 19:14:56
|
[ http://opensource.atlassian.com/projects/hibernate/browse/ANN-382?pa= ge=3Dall ] Emmanuel Bernard updated ANN-382: --------------------------------- Fix Version: 3.2.0 > Exception raising : Strange behaviour depending on package names > ---------------------------------------------------------------- > > Key: ANN-382 > URL: http://opensource.atlassian.com/projects/hibernate/browse/A= NN-382 > Project: Hibernate Annotations > Type: Bug > Environment: Hibernate's annotations packaged in JBoss EJB 3.0 RC8- FD > Microsoft SQL Server 2000 > Reporter: Pierre Four=C3=A8s > Fix For: 3.2.0 > Attachments: BugEJB3.zip > > > As described in hibernate forum (http://forum.hibernate.org/viewtopic.php= ?t=3D960763) and discussed with Emmanuel, I encounter a strange behaviour w= ith annotations depending of my package's names. > Supposing hibernate load classes by package alphabetical order; if it get= the "parent" class first all works fine, if it get the "child" class first= , it raise an exception !=20 > Here is a subset of my classes, cleaned of getters, setters and all unrel= ated things, then followed by the exception stack :=20 > /////////////////////////////////////////////// > package fr.ifis.entity.field.card; > import java.io.Serializable; > import javax.persistence.Embeddable; > import javax.persistence.Entity; > import javax.persistence.Id; > import javax.persistence.ManyToOne; > import fr.ifis.entity.project.Card; > @Entity > public class CardField { > @Id > private PrimaryKey primaryKey =3D new PrimaryKey(); > =20 > // cardtmp is a trick used in order to wait for http://opensource.atla= ssian.com/projects/hibernate/browse/ANN-381 resolution=20 > @ManyToOne > private Card cardtmp; > @Embeddable > private class PrimaryKey implements Serializable { > =20 > @ManyToOne(optional =3D false) > private Card card; > =20 > @ManyToOne(optional =3D false) > private CardKey key; > } > }=20 > /////////////////////////////////////////////// > package fr.ifis.entity.field.card; > import javax.persistence.Entity; > import javax.persistence.GeneratedValue; > import javax.persistence.Id; > @Entity > public class CardKey { > @Id > @GeneratedValue > private int id; > }=20 > /////////////////////////////////////////////// > package fr.ifis.entity.project; > import java.io.Serializable; > import java.util.Set; > import javax.persistence.CascadeType; > import javax.persistence.Embeddable; > import javax.persistence.Entity; > import javax.persistence.FetchType; > import javax.persistence.Id; > import javax.persistence.ManyToOne; > import javax.persistence.OneToMany; > import fr.ifis.entity.field.card.CardField; > @Entity > public class Card { > @Id > private CardPrimaryKey primaryKey =3D new CardPrimaryKey(); > =20 > @OneToMany(cascade=3DCascadeType.ALL, fetch=3DFetchType.EAGER, mappedB= y=3D"cardtmp") // > private Set<CardField> fields; > =20 > @Embeddable > private class CardPrimaryKey implements Serializable { > =20 > @ManyToOne(optional =3D false) > private Project project; > =20 > //An other @ManyToOne is also present in the real model > //The problem still occurs even when i remove this relation, it was= no use to kept it for describe the problem > } > }=20 > /////////////////////////////////////////////// > package fr.ifis.entity.project; > import javax.persistence.Entity; > import javax.persistence.GeneratedValue; > import javax.persistence.Id; > @Entity > public class Project { > @Id > @GeneratedValue > private int id; > }=20 > /////////////////////////////////////////////// > [java] ERROR 29-06 19:42:18,272 (AbstractController.java:incrementSt= ate:350) -Error installing to Start: name=3Dpersistence.units:unitName=3DR= efonte state=3DCreate > [java] org.hibernate.MappingException: Foreign key (FK6771BFAA1845E8= B:CardField [])) must have same number of columns as the referenced primary= key (Card [project_id]) > [java] at org.hibernate.mapping.ForeignKey.alignColumns(ForeignKey.j= ava:90) > [java] at org.hibernate.mapping.ForeignKey.alignColumns(ForeignKey.j= ava:73) > [java] at org.hibernate.cfg.Configuration.secondPassCompileForeignKe= ys(Configuration.java:1182) > [java] at org.hibernate.cfg.Configuration.secondPassCompile(Configur= ation.java:1089) > [java] at org.hibernate.cfg.AnnotationConfiguration.secondPassCompil= e(AnnotationConfiguration.java:302) > [java] at org.hibernate.cfg.Configuration.buildMappings(Configuratio= n.java:1034) > [java] at org.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Conf= iguration.java:1015) > [java] at org.hibernate.ejb.EventListenerConfigurator.configure(Even= tListenerConfigurator.java:154) > [java] at org.hibernate.ejb.Ejb3Configuration.createEntityManagerFac= tory(Ejb3Configuration.java:751) > [java] at org.hibernate.ejb.Ejb3Configuration.createContainerEntityM= anagerFactory(Ejb3Configuration.java:350) > [java] at org.hibernate.ejb.HibernatePersistence.createContainerEnti= tyManagerFactory(HibernatePersistence.java:119) > [java] at org.jboss.ejb3.entity.PersistenceUnitDeployment.start(Pers= istenceUnitDeployment.java:264) > [java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method= ) > [java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAc= cessorImpl.java:39) > [java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Delegating= MethodAccessorImpl.java:25) > [java] at java.lang.reflect.Method.invoke(Method.java:585) > [java] at org.jboss.reflect.plugins.introspection.ReflectionUtils.in= voke(ReflectionUtils.java:55) > [java] at org.jboss.reflect.plugins.introspection.ReflectMethodInfoI= mpl.invoke(ReflectMethodInfoImpl.java:107) > [java] at org.jboss.joinpoint.plugins.BasicMethodJoinPoint.dispatch(= BasicMethodJoinPoint.java:66) > [java] at org.jboss.kernel.plugins.dependency.KernelControllerContex= tActions.dispatchJoinPoint(KernelControllerContextActions.java:100) > [java] at org.jboss.kernel.plugins.dependency.KernelControllerContex= tActions$LifecycleAction.installAction(KernelControllerContextActions.java:= 582) > [java] at org.jboss.kernel.plugins.dependency.KernelControllerContex= tActions$KernelControllerContextAction.install(KernelControllerContextActio= ns.java:175) > [java] at org.jboss.dependency.plugins.AbstractControllerContextActi= ons.install(AbstractControllerContextActions.java:51) > [java] at org.jboss.dependency.plugins.AbstractControllerContext.ins= tall(AbstractControllerContext.java:226) > [java] at org.jboss.dependency.plugins.AbstractController.install(Ab= stractController.java:593) > [java] at org.jboss.dependency.plugins.AbstractController.incrementS= tate(AbstractController.java:346) > [java] at org.jboss.dependency.plugins.AbstractController.resolveCon= texts(AbstractController.java:438) > [java] at org.jboss.dependency.plugins.AbstractController.resolveCon= texts(AbstractController.java:379) > [java] at org.jboss.dependency.plugins.AbstractController.install(Ab= stractController.java:225) > [java] at org.jboss.dependency.plugins.AbstractController.install(Ab= stractController.java:151) > [java] at org.jboss.kernel.plugins.dependency.AbstractKernelControll= er.install(AbstractKernelController.java:79) > [java] at org.jboss.kernel.plugins.dependency.AbstractKernelControll= er.install(AbstractKernelController.java:73) > [java] at org.jboss.ejb3.MCKernelAbstraction.install(MCKernelAbstrac= tion.java:91) > [java] at org.jboss.ejb3.Ejb3Deployment.startPersistenceUnits(Ejb3De= ployment.java:626) > [java] at org.jboss.ejb3.Ejb3Deployment.start(Ejb3Deployment.java:47= 5) > [java] at org.jboss.ejb3.embedded.EJB3StandaloneDeployer.start(EJB3S= tandaloneDeployer.java:460) > [java] at org.jboss.ejb3.embedded.EJB3StandaloneBootstrap.scanClassp= ath(EJB3StandaloneBootstrap.java:291) > [java] at fr.ifis.Main.main(Unknown Source) > /////////////////////////////////////////////// > Indeed, depending on the package names I get or not an excpetion ! > It doesn't work with the package fr.ifis.entity.project but if I rename t= he package in fr.ifis.entity.aproject and then move it "before" the field.c= ard package, all works fine. > In order to facilitate the identification of the problem, I also include = as attachement the eclipse project of this problem repport. > In order to keep reasonable the size of the attachement, I did not includ= ed the libraries nor the configuration files for launch ejb3-embedded. Thos= es files are issued from the project simple-deployment included in JBoss EJ= B 3.0 RC8-FD. The only change i've done was to specify in embedded-jboss-be= ans.xml the properties of my database. > Regards, > Pierre. --=20 This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators= .jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |