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

加载Hibernate配置文件时出现javax.transaction.SystemException缺失异常求助

问题描述

本人使用Eclipse IDE 2023、JavaSE-19版本,基于hibernate-search-5.8.0.Final-dist依赖开发项目,在加载Hibernate.cfg.xml文件时,HibernateUtil.java中抛出java.lang.NoClassDefFoundError: javax/transaction/SystemException异常。已尝试多种依赖组合,仍未解决。

错误栈

Exception in thread "main" java.lang.NoClassDefFoundError: javax/transaction/SystemException
    at org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator.initiateService(JtaPlatformInitiator.java:34)
    at org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator.initiateService(JtaPlatformInitiator.java:26)
    at org.hibernate.service.spi.ServiceRegistryImpl.initiateService(ServiceRegistryImpl.java:242)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:264)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:239)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:216)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:278)
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:465)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:708)
    at com.example.HibernateUtil.getSessionFactory(HibernateUtil.java:15)
    at com.example.Main.main(Main.java:10)
Caused by: java.lang.ClassNotFoundException: javax.transaction.SystemException
    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)
    ... 11 more

项目代码

HibernateUtil.java

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

public class HibernateUtil {
    private static final SessionFactory sessionFactory;

    static {
        try {
            // 加载Hibernate配置文件
            sessionFactory = new Configuration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

Hibernate.cfg.xml(核心配置片段)

<?xml version="1.0" encoding="UTF-8"?>
<!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>
        <property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/testdb</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">password</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</property>
        <property name="hibernate.hbm2ddl.auto">update</property>
        <property name="hibernate.show_sql">true</property>
        <!-- Hibernate Search配置 -->
        <property name="hibernate.search.default.directory_provider">filesystem</property>
        <property name="hibernate.search.default.indexBase">./lucene/indexes</property>
    </session-factory>
</hibernate-configuration>

数据库表结构

CREATE TABLE `user` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `email` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
解决方案

1. 补充JTA API依赖

Hibernate Search 5.8依赖javax.transaction.SystemException类,该类属于JTA API包。由于Java 9+不再默认包含该API,需手动添加依赖:

Maven项目添加依赖

在pom.xml中加入:

<dependency>
    <groupId>javax.transaction</groupId>
    <artifactId>javax.transaction-api</artifactId>
    <version>1.3.3</version>
</dependency>

手动导入jar包

下载对应版本的javax.transaction-api jar包,放入项目lib目录并添加到Eclipse构建路径。

2. 调整Java版本(推荐)

Hibernate Search 5.8.0.Final官方仅支持Java 6、7、8,Java 19属于超版本使用,存在API兼容风险。建议:

  • 降级Java版本到Java 8或Java 11(LTS版本,兼容性更稳定)
  • 或升级Hibernate Search到6.x版本(支持Java 11+,但需注意6.x使用Jakarta EE API替代javax,需同步调整相关依赖和代码包路径)

3. 禁用JTA平台(临时 workaround)

若暂时无法调整依赖或Java版本,可在Hibernate.cfg.xml中显式禁用JTA平台,避免加载相关类:

<property name="hibernate.transaction.jta.platform">org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform</property>

内容的提问来源于stack exchange,提问作者GUMMALLA DRONA SAI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:53:19