我有这样的密码:
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
public class Main {
public static void main(String[] args) {
final StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
.configure().build();
SessionFactory sessionFactory = null;
try {
sessionFactory = new MetadataSources(registry).buildMetadata()
.buildSessionFactory();
} catch (Exception e) {
StandardServiceRegistryBuilder.destroy(registry);
}
if (sessionFactory != null) {
StudentInfo studentInfo = new StudentInfo();
studentInfo.setRollNo(1);
studentInfo.setName("Dmytro");
Session session = sessionFactory.openSession();
session.beginTransaction();
session.save(studentInfo);
session.getTransaction().commit();
session.close();
sessionFactory.close();
StandardServiceRegistryBuilder.destroy(registry);
}
}
}它抛出一个异常:
Exception in thread "main" java.lang.NoClassDefFoundError: javax/transaction/SystemException
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:274)我读到应该将所需文件夹中的transaction添加到类路径中。但是,Hibernate 5.0.6发布包不包含它。

我应该手动添加事务API实现吗?
发布于 2015-12-28 12:17:23
看来这是Hibernate 5.0.6版本的一个问题。对于Hibernate 5.0.3版本,不需要手动添加transaction-api-1.1.jar。
添加所需的jar
为Maven
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<version>1.1</version>
</dependency>对于Gradle构建
compile group: 'javax.transaction', name: 'transaction-api', version: '1.1'手动下载
http://central.maven.org/maven2/javax/transaction/transaction-api/1.1/transaction-api-1.1.jar
更新
这不是一个bug,它是一个特性。
由于JTA工件在各种GAV下的激增,Hibernate作为传递依赖项导出JTA工件可能会在使用另一个GAV的环境中造成问题。应该将其标记为“提供”,以确保在没有明确要求的情况下,人们不会在类路径上获得它。
从那里
更新2
反正是个虫子。它不需要在Hibernate 5.0.7的依赖项中提供transaction-api-1.1.jar。
Hibernate从公共API公开javax.transaction.Synchronization。无论您是否使用JTA,都可以为事务回调注册一个JTA同步。所以JTA规范jar是一个非可选的依赖项。允许这成为非传递性是一个错误,将被恢复:参见HHH-10307。
发布于 2015-12-28 11:17:23
要使用Hibernate事务API,您可以从会话中获得org.hibernate.Transaction。请参阅此链接:单/#事务-api
发布于 2015-12-28 12:47:51
我同意v.ladynev的回答。版本5.0.3包含事务API实现jar,但是版本5.0.6没有。
来自maven存储库的屏幕截图
核心Hibernate O/RM功能5.0.3.最终依赖项:

核心Hibernate O/RM功能5.0.6.最终依赖项:

在某些应用程序中似乎没有使用事务API,所以如果您需要它,可以手动添加它。
https://stackoverflow.com/questions/34492399
复制相似问题