首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Hibernate 5.0.6发布包不包含事务实现jar?

问为什么Hibernate 5.0.6发布包不包含事务实现jar?
EN

Stack Overflow用户
提问于 2015-12-28 11:09:03
回答 3查看 2.2K关注 0票数 4

我有这样的密码:

代码语言:javascript
复制
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);
        }
    }
}

它抛出一个异常:

代码语言:javascript
复制
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实现吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-28 12:17:23

看来这是Hibernate 5.0.6版本的一个问题。对于Hibernate 5.0.3版本,不需要手动添加transaction-api-1.1.jar。

添加所需的jar

为Maven

代码语言:javascript
复制
<dependency>
      <groupId>javax.transaction</groupId>
      <artifactId>jta</artifactId>
      <version>1.1</version>
</dependency>

对于Gradle构建

代码语言:javascript
复制
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的环境中造成问题。应该将其标记为“提供”,以确保在没有明确要求的情况下,人们不会在类路径上获得它。

从那里

使JTA成为提供的(非传递的)依赖关系。

更新2

反正是个虫子。它不需要在Hibernate 5.0.7的依赖项中提供transaction-api-1.1.jar。

Hibernate从公共API公开javax.transaction.Synchronization。无论您是否使用JTA,都可以为事务回调注册一个JTA同步。所以JTA规范jar是一个非可选的依赖项。允许这成为非传递性是一个错误,将被恢复:参见HHH-10307。

票数 2
EN

Stack Overflow用户

发布于 2015-12-28 11:17:23

要使用Hibernate事务API,您可以从会话中获得org.hibernate.Transaction。请参阅此链接:单/#事务-api

票数 0
EN

Stack Overflow用户

发布于 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,所以如果您需要它,可以手动添加它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34492399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档