我试图制作某种简单的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连接器。
答案 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 文件:
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
使用以下步骤将 JAR 文件添加到您的 Java 构建路径。
右键单击您的项目,选择“属性”
在左侧,单击 Java Build Path
在对话框的顶部中心,点击库
点击类路径,然后点击添加 JARs ...
导航到 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
Eclipse 将重新构建您的项目并解决相关的构建/运行时错误。
答案 3 :(得分:-1)
更改为java 8而不是java 9并且工作正常。