我有一个使用JPA的hibernate项目。
我的persistence.xml内容如下:
<persistence version="2.0" 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">
<persistence-unit name="Demo-PU" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<non-jta-data-source>java:/DemoDS</non-jta-data-source>
<class>com.demo.framework.entity.ReportDefinitionEntity</class>
<properties>
<!-- Database connection -->
<property name="hibernate.connection.url" value="jdbc:mysql://192.168.9.110:3306/demoDB" />
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.username" value="root" />
<property name="hibernate.connection.password" value="root" />
<!-- Hibernate dialect -->
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
<!-- Output goodies
-->
<property name="hibernate.query.jpaql_strict_compliance" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.use_sql_comments" value="false" />
<!-- Cache
-->
<property name="hibernate.jdbc.batch_versioned_data" value="true" />
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider" />
</properties>
</persistence-unit>
</persistence>
现在当我使用eclipse运行它时我没有问题,但是当我在Jboss中部署它时,我得到以下错误:
错误[AbstractKernelController]错误 安装到开始: 名称= persistence.unit:的unitName =#演示-PU 状态=创建 java.lang.ClassCastException: org.hibernate.ejb.HibernatePersistence 无法施展 javax.persistence.spi.PersistenceProvider
以下是我所拥有的Jar列表
activation.jar
antlr-2.7.6.jar
asm-attrs.jar
asm.jar
cglib-2.1.3.jar
commons-collections-2.1.1.jar
commons-logging-1.1.jar
dom4j-1.6.1.jar
ehcache-1.2.3.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
hibernate-entitymanager.jar
hibernate-tools.jar
hibernate3.jar
javassist.jar
javax.persistence.jar
jdbc2_0-stdext.jar
jta.jar
mysql-connector-java-5.0.5-bin.jar
xml-writer.jar
如何解决此问题?
答案 0 :(得分:8)
ClassCastException
是由系统中的javax.persistence
API的两个副本引起的(一个在JBoss提供的公共类加载器中,另一个在您的应用程序中)。在JBoss上运行时,您不应该在应用程序中提供此API,也不要打包它。
顺便说一句,看起来你正在使用JPA 2.0 persistence.xml
,但我不相信你正在使用Hibernate的JPA 2.0实现(实际上,你似乎使用的是一个相当旧的版本我可以看到commons-logging.jar
)。您应该修复它,即使用1.0版本的persistence.xml
。
实际上,在JBoss上运行时(使用JTA实体管理器和persistence.xml
),您很可能会使用不同的jta-data-source
。混合数据源使用和Hibernate内置连接池似乎很奇怪。