当前位置: 首页 > 知识库问答 >
问题:

Hibernate中的事务

田宇
2023-03-14

在以下代码中:

SessionFactory sessionFactory = new Configuration().configure("student.cfg.xml").buildSessionFactory();
    Session session = sessionFactory.openSession();
    //Transaction tran = session.beginTransaction();
    session.save(student);
    //tran.commit();
    session.flush();
    session.close();

无论我是否注释/取消注释事务,它们都工作正常,即没有事务也保存操作成功执行。但是当我检查留档时,他们总是在插入更新删除之前使用事务。有什么具体原因吗?我错过了什么吗?

请告诉我这件事。我相当困惑:(

当做

共有3个答案

韦高格
2023-03-14

我认为hibernate中的非选择查询正在执行多个查询(或使用多个操作),这就是为什么我们需要事务来执行它们。

闻人英韶
2023-03-14

阅读本文,文章来自JBOSS

有一件事我相信,如果您不使用事务(在某些时候您可能需要它,如果不需要原子操作),那么任何与数据库相关的操作都会访问数据库。它使系统运行得非常慢。如果执行事务,则hibernate通过一次点击db来执行同一事务中的所有操作。在某个地方,我以前读过。

谭嘉歆
2023-03-14

当您总是使用自动提交时,它可能会损害您的数据库。假设你想一次完成一堆工作。在这种情况下,您需要创建事务并在完成所有作业后提交所有工作。例如,您需要为原子工作执行大量数据库访问。在这种情况下,您需要完成事务中的所有工作并提交所有工作。

Session session = factory.openSession();
Transaction tx = session.beginTransaction();

// do some work
tx.commit();

当然是你的接球拦网。

 类似资料:
  • 我有相同的模块,连接数据库运行在两个服务器(后台和前台)。它与同一个数据库连接。 我使用JPA(Hibernate实现)和Spring事务管理。 我有以下问题: 我必须用两个不同字段的最大值1更新表a中的字段a(表a中的字段a,表b中的字段b) 案例1: 更新前 表A fA = 100 tableB fB=102 更新后 表a fA=103 tableB fB=102 案例2: 更新前 表A fA

  • 我在Hibernate中看到了以下属性。cfg。一个企业(EJB)应用程序中的xml。我不知道这到底意味着什么。 我在代码中没有找到任何与事务相关的东西,比如begin transaction或commit,相反,我只看到sessionFactory。openSession()和会话。flush()。如果启用了上述配置,如何管理事务。

  • 我的项目使用的是Spring MVC4、Hibernate5。我已经用通知拦截器配置了hibernate事务,但它没有像我希望的那样回滚。请帮帮我,我的配置有什么问题? @aspect@配置公共类TxAdviceInterceptor{ } 道: } 正如上面的代码,我想如果postdao.save是error,tagDao也是rollback。

  • 我们正在开发一套模块(希望)部署在Apache Karaf中。每个模块都有一个分层结构,从域JPA实体/DAO、服务、Web组件等开始,其中每一层都变成了不同的OSGi包。 JPA实体扩展了一些属于公共包的抽象超类型。问题来了.. 当学习卡拉夫和OSGi的方法时,OpenJPA被“宣传”了很多,所以我们首先尝试了一下。编译时增强是一场灾难,完全是浪费时间,因为我们的实体层次结构跨越了多个包(jar

  • 我有一个使用Hibernate/JPA的持久性Spring Boot应用程序。 我正在使用事务来管理我的数据库持久性,并且我正在使用注释来定义应该以事务方式执行的方法。 在持久化时,我有三个主要的事务粒度级别: 要保留的实体批次 要保留的单个实体 保留实体的单一数据库操作 因此,在考虑整个持久性流量时,您可以想象我有三个级别的嵌套事务。 第2层和第3层之间的交互如我所愿透明地工作,因为在没有为事务

  • 我正在将代码从EJB迁移到Spring-Hibernate。如果发生故障,如何加入事务并回滚?下面是EJB中的代码: 更新1:我们如何连接发生在不同数据库上的两个事务?有2个事务需要原子地执行。如果第二个事务失败,则必须回滚第一个事务。对此如何落实?