You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

未用Maven/pom.xml时Hibernate报错:javax/xml/bind/JAXBException缺失

问题描述

在未使用pom.xml及Maven的环境下使用Hibernate,运行程序时出现错误,相关代码与报错信息如下:

主类代码

package com.luv2code.hibernate.demo;

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


public class CreateStudentDemo {

    public static void main(String[] args) {
        
        // 创建Session工厂
        SessionFactory factory = new Configuration().configure("hibernate.cfg.xml").addAnnotatedClass(Student.class).buildSessionFactory();
        
        // 创建Session
        Session session = factory.getCurrentSession();
        try {
            
            // 创建学生对象
            System.out.println("创建一个新的学生对象");
            Student tempStudent = new Student("Paul", "Wall", "paulWall@gmail.com");
            
            // 开启事务
            session.beginTransaction();
            
            // 保存学生对象
            System.out.println("保存学生");
            session.save(tempStudent);
            
            // 提交事务
            session.getTransaction().commit();
            System.out.println("完成...");
            
            
        }
        catch (Exception e) {
            System.out.println("错误!!!");
        }finally {
            ((SessionFactory) factory).close();
        }
    }

}

Hibernate配置文件

<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

        <!-- JDBC数据库连接设置 -->
        <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/hb_student_tracker?useSSL=false&amp;serverTimezone=UTC</property>
        <property name="connection.username">hbstudent</property>
        <property name="connection.password">hbstudent</property>

        <!-- JDBC连接池设置...使用内置测试池 -->
        <property name="connection.pool_size">1</property>

        <!-- 选择SQL方言 -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

        <!-- 将SQL输出到控制台 -->
        <property name="show_sql">true</property>

        <!-- 设置当前会话上下文 -->
        <property name="current_session_context_class">thread</property>
 
    </session-factory>

</hibernate-configuration>

报错信息

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.luv2code.hibernate.demo.CreateStudentDemo.main(CreateStudentDemo.java:13)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
... 5 more
解决方案

该错误核心原因是:你使用的JDK版本为9及以上,JAXB API在JDK9之后被移出JDK核心库,但当前Hibernate版本依赖该API,导致类找不到。

方案一:手动添加依赖jar包

由于未使用Maven,需手动下载以下JAXB相关jar包,放入项目lib目录并添加到类路径中:

  • jaxb-api.jar
  • jaxb-core.jar
  • jaxb-impl.jar
  • javax.activation-api.jar
    建议选择与你当前Hibernate版本兼容的版本(如2.3.x系列)。

方案二:添加JVM兼容参数

若不想额外添加jar包,可在运行程序时添加JVM参数,让JDK兼容旧模块:

--add-modules java.xml.bind

操作方式:在IDE运行配置的VM参数栏中添加上述参数,重新运行程序即可。

内容的提问来源于stack exchange,提问作者Mohammed Abdou TOUNSSI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 04:45:43