在带有 Hibernate 5 的 Weblogic12 上使用 JPA2.1:java.lang.NoClassDefFoundError:无法初始化类 org.hibernate.jpa.HibernatePersistenceProvider

koe*_*sle 5 java hibernate jpa weblogic12c

我对尝试将 JPA 2.1 PersistenceManager 与 Hibernate 5 一起使用的简单任务感到非常沮丧。

我打包了一个使用 weblogic ant 任务 jwsc (weblogic.wsee.tools.anttasks.JwscTask) 构建的简单 Web 服务,但是在部署时我得到了这个NoClassDefFoundError

[wldeploy] [BasicOperation.execute():472] : Initiating deploy operation for app, import2, on targets:
 [wldeploy] [BasicOperation.execute():474] :    myserver
 [wldeploy] Task 0 initiated: [Deployer:149026]deploy application import2 on myserver.
 [wldeploy] dumping Exception stack
 [wldeploy] Task 0 failed: [Deployer:149026]deploy application import2 on myserver.
 [wldeploy] Target state: deploy failed on Server myserver
 [wldeploy] java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.jpa.HibernatePersistenceProvider
 [wldeploy]     at java.lang.Class.forName0(Native Method)
 [wldeploy]     at java.lang.Class.forName(Class.java:348)
 [wldeploy]     at weblogic.persistence.BasePersistenceUnitInfo.getPersistenceProvider(BasePersistenceUnitInfo.java:441)
 [wldeploy]     at weblogic.persistence.BasePersistenceUnitInfo.initializeEntityManagerFactory(BasePersistenceUnitInfo.java:461)
 [wldeploy]     at weblogic.persistence.BasePersistenceUnitInfo.initializeEntityManagerFactory(BasePersistenceUnitInfo.java:454)
 [wldeploy]     at weblogic.persistence.BasePersistenceUnitInfo.init(BasePersistenceUnitInfo.java:141)
Run Code Online (Sandbox Code Playgroud)

hibernate-entitymanager-5.0.4.Final.jar 中提供了 org.hibernate.jpa.HibernatePersistenceProvider 类。

我的 import2.war 确实在 WEB-INF/lib 中包含这个 jar 以及其他内容:

hibernate-commons-annotations-5.0.0.Final.jar
hibernate-core-5.0.4.Final.jar
hibernate-entitymanager-5.0.4.Final.jar
hibernate-java8-5.0.4.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
Run Code Online (Sandbox Code Playgroud)

作为记录,这里是我的 persistence.xml,打包在 /WEB-INF/classes/META-INF/persistence.xml 中的 WAR 文件中

<version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.1">

    <persistence-unit name="AdminPersistenceUnit">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <properties>
            <property name="hibernate.connection.url" value="jdbc:oracle:thin:@//########:1521/xe"/>
            <property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver"/>
            <property name="hibernate.connection.username" value="#########"/>
            <property name="hibernate.connection.password" value="#########"/>
            <property name="hibernate.archive.autodetection" value="class"/>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
            <property name="hbm2ddl.auto" value="update"/>
        </properties>
    </persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)

最后,这是我使用entityManager的地方:

public class AdminDatabaseWebservice {
    @PersistenceContext(name = "AdminPersistenceUnit")
    protected EntityManager entityManager;
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!

tha*_*_DG 0

您可以尝试以下操作吗?

public class AdminDatabaseWebservice {

    @PersistenceUnit(unitName = "AdminPersistenceUnit")
    private EntityManagerFactory entityManagerFactory;
    .....
Run Code Online (Sandbox Code Playgroud)

创建entityManager使用entityManagerFactory.

EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.createQuery("from Entity").getResultList();
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。