JPA2和Hibernate的问题
我有一个问题:JPA2和Hibernate的问题,hibernate,jpa-2.0,Hibernate,Jpa 2.0,我有一个问题: Exception in thread "main" javax.persistence.PersistenceException: [PersistenceUnit: fb-persistence] Unable to configure EntityManagerFactory at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:378) at org.hiberna
Exception in thread "main" javax.persistence.PersistenceException: [PersistenceUnit: fb-persistence] Unable to configure EntityManagerFactory
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:378)
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:56)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32)
at it.synclab.fb.test.Test.main(Test.java:13)
Caused by: java.lang.ClassCastException: org.hibernate.mapping.UnionSubclass cannot be cast to org.hibernate.mapping.RootClass
at org.hibernate.cfg.annotations.PropertyBinder.bind(PropertyBinder.java:209)
at org.hibernate.cfg.annotations.PropertyBinder.makePropertyValueAndBind(PropertyBinder.java:200)
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:2061)
at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:796)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:707)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:4008)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3962)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1371)
at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1348)
at org.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Configuration.java:1522)
at org.hibernate.ejb.EventListenerConfigurator.configure(EventListenerConfigurator.java:193)
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:1100)
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:282)
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:366)
... 4 more
谁能帮我解决?我已经用JPA配置了Hibernate,文件persistence.xml是:
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="fb-persistence" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>it.synclab.fb.jpa.Plugin</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
<property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.connection.username" value="***"/>
<property name="hibernate.connection.password" value="***"/>
<property name="hibernate.connection.url" value="jdbc:oracle:thin:@localhost:1521:RAFFAELE"/>
</properties>
</persistence-unit>
</persistence>
有什么问题?帮助我?我忘了,我已经用maven2配置了dependenci,文件pom.xml是:
...
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>3.6.3.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.2.0.Final</version>
</dependency>
...
谢谢我敢打赌,您的类路径上有多个hibernate jar,这就是它抛出类强制转换异常的原因
另一点看起来是错误的,但可能是正确的,那就是您正在使用JTA事务。如果您不知道JTA是什么意思,请将persistence.xml上的事务类型更改为transaction type=RESOURCE_LOCAL我在使用从彼此继承的实体bean时经常遇到此错误。尽管它们根据JPA2规范进行了正确的注释,但它们在Hibernate中不起作用。Hibernate JPA2实现中有许多这样的bug。最后,我所做的是通过为鉴别器列@DiscriminatorValueSomeValue添加注释,从JPA2s的视点配置中添加非常具体但不是强制性的,这些列用于连接@PrimaryKeyJoinColumnname=idColumn。从截取的代码来看,您似乎没有使用继承,但如果您确实使用了继承,请尝试
此外,如果您的项目允许,可以将JPA2实现从Hibernate切换到Eclipselink。我经历过无数次,正确的JPA2代码在EclipseLink中运行良好,但在Hibernate中抛出了bizzare异常。您能显示您正在使用的主类吗?ops借口…在主类中,我称为EntityManagerFactory factory=Persistence.createEntityManagerFactoryfb-Persistence;你确定Plugin是唯一的持久类吗?我只是在测试这个类,但是我有更多的类Entity@giulius:尝试添加到persistence.xml-如果问题消失,则是由其他实体引起的。我已更改persistence.xml上的事务类型,并检查了类路径的库,即使我使用maven解决了依赖关系?不管怎样,问题仍然存在……你有其他想法吗?Maven不会在类路径中放置重复的JAR,但是你可能会导入2个具有不同组或工件ID的hibernate JAR。运行mvn dependency:tree-Dverbose=true并检查maven是否没有在类路径上放置两个版本的Hibernate。似乎maven没有在类路径中放置重复的JAR。我检查了repository.m/、target\classes文件夹和Eclipse构建路径的库。我在正确的地方看到了吗?嗯,我刚刚检查了Hibernate 3.6.2上的类层次结构,我目前使用的版本和RootClass和UnionSubClass没有关联,它们有一个公共的超类,但它们不相互继承。这可能是因为hibernate 3.6.3中有一个可怕的bug,我对此表示怀疑,或者是因为有些库存在冲突。同样,看起来您有一个类路径问题,但是类不兼容。很抱歉,我无法为您提供更多帮助。我检查了eclipse的文件.classpath,没有用于hibernate的重复库。如果你愿意,我可以把文件寄出去吗?谢谢你迄今为止的帮助
...
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>3.6.3.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.2.0.Final</version>
</dependency>
...