Hibernate Session Factory javax / xml / bind / JAXBException错误

时间:2017-10-12 13:06:13

标签: java hibernate

我试图制作某种简单的java + hibernate应用程序。不知何故,当我运行应用程序时出现错误。

  

CreateStudentDemo.java

package com.basicproject.hibernate.demo;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import com.basicproject.hibernate.demo.entity.Student;
public class CreateStudentDemo {

    public static void main(String[] args) {


        // create session factory
        SessionFactory factory = new Configuration()
                .configure("hibernate.cfg.xml")
                .addAnnotatedClass(Student.class)
                .buildSessionFactory();


        // create session
        Session session = factory.getCurrentSession();

        try {
            // create a student object
            System.out.println("Creating new student object...");
            Student tempStudent = new Student("Luke", "Samson", "ls@bk.com");

            // start a transaction
            session.beginTransaction();

            // save the student object
            System.out.println("Saving the student...");
            session.save(tempStudent);

            // commit transaction
            session.getTransaction().commit();

            System.out.println("Done!");
        }
        finally {
            factory.close();
        }
    }

}
  

Student.java

package com.basicproject.hibernate.demo.entity;

import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table;

@Entity @Table(name="student") public class Student {

    @Id     @GeneratedValue(strategy=GenerationType.IDENTITY)   @Column(name="id")  private int id;

    @Column(name="first_name")  private String firstName;

    @Column(name="last_name")   private String lastName;

    @Column(name="email")   private String email;

    public Student() {

    }

    public Student(String firstName, String lastName, String email) {       this.firstName = firstName;         this.lastName = lastName;       this.email
= email;    }

    public int getId() {        return id;  }

    public void setId(int id) {         this.id = id;   }

    public String getFirstName() {      return firstName;   }

    public void setFirstName(String firstName) {        this.firstName = firstName;     }

    public String getLastName() {       return lastName;    }

    public void setLastName(String lastName) {      this.lastName = lastName;   }

    public String getEmail() {      return email;   }

    public void setEmail(String email) {        this.email = email;     }

    @Override   public String toString() {      return "Student [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", email=" + email + "]";  }

}

错误。我似乎错过了一些东西,但我还没有意识到这一点。

  

错误

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.cfg.Configuration.<init>(Configuration.java:123)   at org.hibernate.cfg.Configuration.<init>(Configuration.java:118)   at com.basicproject.hibernate.demo.CreateStudentDemo.main(CreateStudentDemo.java:14) 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:185)   at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)

希望它可以帮助解决我的问题。谢谢你的帮助。我的项目中还有一个lib文件夹。包含Hibernate的libs(必需)和mysql连接器。

4 个答案:

答案 0 :(得分:1)

您在类路径中遗漏jaxb-api-1.0.jar

如果您是maven,请在代码中添加以下依赖项:

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

答案 1 :(得分:1)

答案 2 :(得分:0)

我想你和我在上同一个在线课程!在之前的课程中,教师发布了此问题的解决方案:

这是因为 Java 9 及更高版本。

Java 9 及更高版本已从其默认类路径中删除 java.xml.bind。这就是为什么我们得到 class not found 异常。我们必须显式地将 JAR 文件添加到构建路径中。


解决方案

对于 Java 9 及更高版本,您需要额外的 JAR 文件。

您需要下载以下 JAR 文件:

  • javax.activation-1.2.0.jar
  • jaxb-api-2.3.0.jar
  • jaxb-core-2.3.0.jar
  • jaxb-impl-2.3.0.jar

  1. 使用以下链接下载文件:

http://search.maven.org/remotecontent?filepath=com/sun/activation/javax.activation/1.2.0/javax.activation-1.2.0.jar

http://search.maven.org/remotecontent?filepath=javax/xml/bind/jaxb-api/2.3.0/jaxb-api-2.3.0.jar

http://search.maven.org/remotecontent?filepath=com/sun/xml/bind/jaxb-core/2.3.0/jaxb-core-2.3.0.jar

http://search.maven.org/remotecontent?filepath=com/sun/xml/bind/jaxb-impl/2.3.0/jaxb-impl-2.3.0.jar


  1. 将 JAR 文件复制到项目的 lib 文件夹中
  • javax.activation-1.2.0.jar
  • jaxb-api-2.3.0.jar
  • jaxb-core-2.3.0.jar
  • jaxb-impl-2.3.0.jar

使用以下步骤将 JAR 文件添加到您的 Java 构建路径。

  1. 右键单击您的项目,选择“属性”

  2. 在左侧,单击 Java Build Path

  3. 在对话框的顶部中心,点击库

  4. 点击类路径,然后点击添加 JARs ...

  5. 导航到 JAR 文件 /lib

选择文件: javax.activation-1.2.0.jar jaxb-api-2.3.0.jar jaxb-core-2.3.0.jar jaxb-impl-2.3.0.jar

  1. 点击确定,然后点击应用并关闭

Eclipse 将重新构建您的项目并解决相关的构建/运行时错误。

答案 3 :(得分:-1)

更改为java 8而不是java 9并且工作正常。