[
http://opensource.atlassian.com/projects/hibernate/browse/EJB-401?page=co...
]
Farrukh Najmi commented on EJB-401:
-----------------------------------
I have found the cause of the problem to be due to there being two different versions of
class acme.Referenced in two separate jars. The first jar has the class acme.Referer and
acme.Referenced. The second jar only has class acme.Referenced. When I remove the second
jar from classpath the problem goes away. It definitely seems to be a ClassLoader issue.
The problem scenario still exists if I use the current latest bibernate stack based on row
in compatibility matrix for hibernate-entity-manager 3.4.0.GA.
@OneToOne or @ManyToOne references an unknown entity when
maven-surefire-test runs without -DforkMode=none property
-------------------------------------------------------------------------------------------------------------------
Key: EJB-401
URL:
http://opensource.atlassian.com/projects/hibernate/browse/EJB-401
Project: Hibernate Entity Manager
Issue Type: Bug
Components: EntityManager
Affects Versions: 3.3.2.GA
Reporter: Farrukh Najmi
Priority: Critical
I have an entity class called Referer that references another entity class called
Referenced as follows:
//The class that has a reference
@Entity(name = "acme.Referer")
@Table(name = "REFERER")
@Inheritance(strategy = InheritanceType.JOINED)
public class DeliveryInfoType extends RefererBase {
@ManyToOne(targetEntity = acme.Referenced.class, cascade = {
CascadeType.ALL
})
@JoinColumn(name = "REFERER_REFERENCED_ID")
protected acme.Referenced referenced;
...
}
//The class that is being referenced
@Entity(name = "acme.Referenced")
@Table(name = "REFERENCED")
@Inheritance(strategy = InheritanceType.JOINED)
public class EndpointReferenceType
...
}
The abstract base class for Referer is a mapped superclass called RefererBase as
follows:
@MappedSuperclass
public abstract class ExtensibleObjectType {
...
}
When I run a junit test via maven-surefire-plugin while specifying the -DforkMode=none
property then the test succeeds.
When I run a junit test via maven-surefire-plugin without specifying the -DforkMode=none
property then the test fails when creating the EntityManagerFactory as follows.
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: my-persistence-unit]
Unable to configure EntityManagerFactory
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:265)
at
org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:125)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:83)
at acme.SomeClass.createEntityManagerFactory(SomeClass.java:278)
at acme.SomeClass.setUp(SomeClass.java:233)
at acme.SomeClass.<init>(SomeClass.java:57)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:100)
... 57 more
Caused by: org.hibernate.AnnotationException: @OneToOne or @ManyToOne on
acme.Referer.referenced references an unknown entity: acme.Referenced
at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:81)
at
org.hibernate.cfg.AnnotationConfiguration.processFkSecondPassInOrder(AnnotationConfiguration.java:499)
at
org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:304)
at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1121)
at
org.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Configuration.java:1225)
at
org.hibernate.ejb.EventListenerConfigurator.configure(EventListenerConfigurator.java:159)
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:854)
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:191)
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:253)
... 67 more
maven-surefire-plugin defines its forkMode property as follows at
<
http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html>:
forkMode String Option to specify the forking mode. Can be "never",
"once" or "always". "none" and "pertest" are also
accepted for backwards compatibility. Default value is once.
I am baffled as to why hiberante EntityManager is behaving working when forkMode is set
to "none" but fails when forkMode is set to default of "once".
It seems like a classloader related issue. Here are the hibernate related jars in my
webapp:
org.hibernate:hibernate-search:jar:3.0.1.GA
org.hibernate:hibernate:jar:3.2.6.ga
org.hibernate:hibernate-entitymanager:jar:3.3.2.GA
org.hibernate:hibernate-commons-annotations:jar:3.0.0.ga
org.hibernate:ejb3-persistence:jar:1.0.1.GA
org.hibernate:hibernate-annotations:jar:3.3.1.GA
This issue may possibly be related to following issue:
<
http://opensource.atlassian.com/projects/hibernate/browse/EJB-199>
--
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....
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira