java - 在 hibernate 中使用 jpa 时获取 hibernate.properties not found 和 java.lang.NoClassDefFoundError

标签 java hibernate jpa oracle10g persistence.xml

我正在尝试使用 Maven 创建一个基本的快速启动项目来理解 jpa。我正在使用 Hibernate 版本 5.2.8.Final。运行时显示 hibernate.properties not found 并给出 NoClassDefFoundError。由于我使用的是 oracle 10g,因此我的类路径中也有 ojdbc14 jar 文件。我无法弄清楚为什么会出现此错误...任何帮助将不胜感激...谢谢

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>strange</groupId>
  <artifactId>JPA</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>JPA</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.2.8.Final</version>
    </dependency> 
  </dependencies>
</project>
package strange.JPA;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class App 
{
    public static void main( String[] args )
    {
       test t = new test();
       t.setTest_id(1);
       t.setName("test1");


       EntityManagerFactory emf = Persistence.createEntityManagerFactory("ab");
       EntityManager em = emf.createEntityManager();

       em.getTransaction().begin();
       em.persist(t);
       em.getTransaction().commit();
    }
}
package strange.JPA;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class test {

    @Id
    private int test_id;
    private String name;

    public int getTest_id() {
        return test_id;
    }
    public void setTest_id(int test_id) {
        this.test_id = test_id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "test [test_id=" + test_id + ", name=" + name + "]";
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
             xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="ab">     
        <properties>
           <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.driver.OracleDriver"/>
           <property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@localhost:1521/XE"/>
           <property name="javax.persistence.jdbc.user" value="system"/>
           <property name="javax.persistence.jdbc.password" value="pegasus"/>        
        </properties>
    </persistence-unit>
</persistence>
Apr 30, 2020 4:10:32 PM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation
INFO: HHH000204: Processing PersistenceUnitInfo [
    name: ab
    ...]
Apr 30, 2020 4:10:33 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {5.2.8.Final}
Apr 30, 2020 4:10:33 PM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
    at org.hibernate.boot.spi.XmlMappingBinderAccess.<init>(XmlMappingBinderAccess.java:43)
    at org.hibernate.boot.MetadataSources.<init>(MetadataSources.java:87)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:208)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:170)
    at org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:76)
    at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilder(HibernatePersistenceProvider.java:181)
    at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:129)
    at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:71)
    at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:52)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
    at strange.JPA.App.main(App.java:16)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
    ... 12 more

最佳答案

从 Java 9 及更高版本开始,JAXB api 已从标准 Java SE 中删除,因此根据您的情况,您只需添加

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>

依赖于你的pom.xml,它应该可以工作。 以下链接有更多信息
How to resolve java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException in Java 9

关于java - 在 hibernate 中使用 jpa 时获取 hibernate.properties not found 和 java.lang.NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61520226/

相关文章:

java - 如何正确初始化 JNA 中 `Structure` 内的数组字段?

java - 在Android中对ArrayList中的单个值下的数据列表进行分类。(参见说明)

java - Spring jta 事务管理器

java - 避免 Hibernate LazyInitializationExceptions 的架构

java - 如何使用 Hibernate 创建包含多个条件的 OR block ?

javascript - 如何在点击html时运行java方法?

java - 使用 Maven 生成 Hibernate 元模型中的 IllegalStateException

Java 正则表达式 : replacing a specific kind of url in a string?

java - 使用 IMAP 向服务器发送电子邮件时身份验证失败

java - ORM 将变量映射到 Hibernate 中的 SQL 查询