当前位置: 首页 > 面试题库 >

Hibernate + Java 9 + javax.transaction.SystemException

章哲茂
2023-03-14
问题内容

我可以按照这样的步骤

    <dependency>
        <groupId>javax.transaction</groupId>
        <artifactId>javax.transaction-api</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.3.0.CR1</version>
        <exclusions>
            <exclusion>
                <groupId>org.jboss.spec.javax.transaction</groupId>
                <artifactId>jboss-transaction-api_1.2_spec</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

+模块信息:

requires javax.transaction.api;

但是该解决方案对我不起作用,因为我仍然遇到错误

[ERROR] error: module org.apache.commons.lang3 reads package javax.transaction.xa from both javax.transaction.api and java.sql

然后,四处浏览,我发现1.3版删除了javax.transaction.xa,所以我去:

    <dependency>
        <groupId>javax.transaction</groupId>
        <artifactId>javax.transaction-api</artifactId>
        <version>1.3</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.3.0.CR1</version>
        <exclusions>
            <exclusion>
                <groupId>org.jboss.spec.javax.transaction</groupId>
                <artifactId>jboss-transaction-api_1.2_spec</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
  • 模块信息:
    requires java.transaction;
    

    requires java.persistence;
    requires java.sql;
    requires java.naming;
    requires jboss.logging;

现在,我可以成功构建我的JAR。我将该jar导入另一个项目,然后该项目崩溃,如下所示:

NoClassDefFoundErrorjavax/transaction/SystemException
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:374)
at jboss.logging@3.3.1.Final/org.jboss.logging.Logger$1.run(Logger.java:2554)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at jboss.logging@3.3.1.Final/org.jboss.logging.Logger.getMessageLogger(Logger.java:2529)
at jboss.logging@3.3.1.Final/org.jboss.logging.Logger.getMessageLogger(Logger.java:2516)
at org.hibernate.orm.core@5.3.0.CR1/org.hibernate.internal.CoreLogging.messageLogger(CoreLogging.java:28)
at org.hibernate.orm.core@5.3.0.CR1/org.hibernate.internal.CoreLogging.messageLogger(CoreLogging.java:24)
at org.hibernate.orm.core@5.3.0.CR1/org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.<clinit>(ClassLoaderServiceImpl.java:40)
at org.hibernate.orm.core@5.3.0.CR1/org.hibernate.boot.registry.BootstrapServiceRegistryBuilder.build(BootstrapServiceRegistryBuilder.java:218)
at org.hibernate.orm.core@5.3.0.CR1/org.hibernate.boot.registry.StandardServiceRegistryBuilder.<init>(StandardServiceRegistryBuilder.java:58)
at a.data/com.a.data.hibernate.HibernateServiceLocator.<clinit>(HibernateServiceLocator.java:39)
at g.editor/com.g.App.start(App.java:293)

Caused by javax.transaction.SystemException
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)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:374)
at jboss.logging@3.3.1.Final/org.jboss.logging.Logger$1.run(Logger.java:2554)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at jboss.logging@3.3.1.Final/org.jboss.logging.Logger.getMessageLogger(Logger.java:2529)
at jboss.logging@3.3.1.Final/org.jboss.logging.Logger.getMessageLogger(Logger.java:2516)
at org.hibernate.orm.core@5.3.0.CR1/org.hibernate.internal.CoreLogging.messageLogger(CoreLogging.java:28)
at org.hibernate.orm.core@5.3.0.CR1/org.hibernate.internal.CoreLogging.messageLogger(CoreLogging.java:24)
at org.hibernate.orm.core@5.3.0.CR1/org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.<clinit>(ClassLoaderServiceImpl.java:40)
at org.hibernate.orm.core@5.3.0.CR1/org.hibernate.boot.registry.BootstrapServiceRegistryBuilder.build(BootstrapServiceRegistryBuilder.java:218)
at org.hibernate.orm.core@5.3.0.CR1/org.hibernate.boot.registry.StandardServiceRegistryBuilder.<init>(StandardServiceRegistryBuilder.java:58)

我已经尝试:-导入java.se.ee-
将我的JDK从9.0.1更新到9.0.4-将我的JDK更新到10.0.0,这使我陷入了Maven问题,所以我离开了那条路线…我可以在必要时将其取回。-我没有使用故障保护…尽管我尝试了有关添加maven插件:P的StackOverflow答案(是的,现在我愿意尝试逻辑上的东西)。

有人真的解决了这种情况吗?我的意思是在一个模块中hibernate,然后在第二个模块中将其与命名模块一起使用?

非常感谢


问题答案:

更新2019/08/05

库已更新,可以提供更好的支持。请使用与以下相同的模块信息定义

opens xx.xx.xx.entities to org.hibernate.orm.core;

requires java.transaction;
requires java.xml.bind;
requires java.sql;
requires java.activation;
requires java.persistence;

Maven已大大简化

<plugin>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <configuration>
                            <annotationProcessorPaths>
                                <annotationProcessorPath>
                                    <groupId>org.hibernate</groupId>
                                    <artifactId>hibernate-jpamodelgen</artifactId>
                                    <version>${maven.hibernate.version}</version>
                                </annotationProcessorPath>
                                <annotationProcessorPath>
                                    <groupId>org.projectlombok</groupId>
                                    <artifactId>lombok</artifactId>
                                    <version>${lombok.version}</version>
                                </annotationProcessorPath>
                                <path>
                                    <groupId>javax.xml.bind</groupId>
                                    <artifactId>jaxb-api</artifactId>
                                    <version>2.3.0</version>
                                </path>
                                <path>
                                    <groupId>javax.annotation</groupId>
                                    <artifactId>javax.annotation-api</artifactId>
                                    <version>1.3.1</version>
                                </path>
                                <path>
                                    <groupId>org.mapstruct</groupId>
                                    <artifactId>mapstruct-processor</artifactId>
                                    <version>${mapstruct.version}</version>
                                </path>
                            </annotationProcessorPaths>
                        </configuration>

                    </plugin>


 类似资料:
  • Java文档可以使用工具生成。 它目前以格式生成文档。 在java 9中,可以通过在命令行参数中使用选项生成格式的文档。 旧式的java文档 考虑F:\worksp\java9文件夹中有一个Java文件:Tester.java,其代码如下 - 可以运行jdk 7 的javadoc工具来生成文档。 使用标志运行jdk 9的javadoc工具以生成新类型的文档。 打开生成的文件,如下所示 -

  • 类是在Java 8中引入的,可以通过设置其值和状态显式来完成。 它可以用作。 它支持未来完成时触发的相关函数和操作。 在Java 9中,CompletableFuture API进一步得到了增强。 以下是对API进行的相关更改。 支持延迟和超时。 改进了对子类的支持。 添加了新的工厂方法。 1. 支持延迟和超时 如果在给定超时之前未完成,则此方法使用给定值完成。 如果在给定的超时之前没有完成,则此

  • 主要内容:takeWhile(Predicate接口),dropWhile(Predicate接口)流(Stream)是在Java中引入的,以帮助开发人员从一系列对象中执行聚合操作。在Java 9中,使用较少的方法就可以使流更好。 takeWhile(Predicate接口) 语法 方法获取所有值直到返回。 在有序流的情况下,它返回一个流,该流包含从此流中匹配给定的元素的最长前缀。 示例 方法获取所有,和值,然后当字符串为空,它将停止执行。 dropWhile(Predicate接口) 语法 方

  • 在负责控制和管理操作系统进程的Java 9 Process API中已经有了相当大的改进。 ProcessHandle类提供进程本机进程ID,开始时间,累计CPU时间,参数,命令,用户,父进程和子进程。 类还提供了检查进程活性并销毁进程的方法。 它具有方法,当进程退出时,类可以异步执行操作。 参考以下实现代码(Tester.java)- 执行上面示例代码,得到以下结果 -

  • REPL代表Read-Eval-Print Loop 。 使用JShell,Java具有功能。 使用REPL,我们可以编写和测试基于java的逻辑,而无需使用javac编译并直接查看计算结果。 运行JShell 打开命令提示符并键入,运行结果如下所示 - 查看JShell命令 当进入命令之后,可键入 来查看中的帮助信息。 运行JShell命令 输入命令并查看当前使用的导入。 在JShell中运行计

  • 主要内容:Java SE 8:Optional类基础,Java SE 8:Optional基本示例,Java SE 9:Optional类改进,Java SE 8样式:Optional方法在这篇文章中,我们将讨论“Java SE 8的类如何解决空检查问题?”以及“Java SE 9的类改进”。 作为Java开发人员,我们知道为了避免错误而对每个对象进行空检查时需要做不少的工作。 Java SE 8:Optional类基础 Oracle公司已经引入了类作为包的一部分。 它是一个容器对象,它可能包含

  • 主要内容:Java9 新功能JAVA 9(aka jdk 1.9)是JAVA编程语言开发的主要版本。 它的最初版本于2017年9月21日发布。Java 9发布的主要目标是 - 使JDK和Java标准版平台模块化,它可以很好地缩小运行在小型计算设备中。 提高JDK和Java实现的整体安全性。 使Java代码库和大型应用程序的构建过程和维护变得轻松,适用于JAVA SE和EE平台。 为Java平台设计和实现一个标准模块系统,可以

  • 主要内容:面向读者,前提条件,问题反馈Java 9是最受期待的并且是Java编程语言的主要特性版本。 这是一个入门教程,以简单直观的方式介绍Java 9的基本和高级功能的用法。 面向读者 本教程将对大多数Java开发人员有用,无论是初学者还是高级开发者。 完成本教程后,您应该在Java 9方面拥有中等水平的专业知识。 前提条件 基本的Java编程语言知识是学习本教程的唯一先决条件。 问题反馈 我们不能保证您在学习此Java 9教程的过