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 |