首页 > 解决方案 > Hibernate 查找操作是否需要事务?

问题描述

一般来说,我知道选择查询不需要事务。只有创建和更新操作需要事务。但是休眠最新文档示例使用事务进行选择查询。有人可以澄清原因吗?下面的代码来自以下链接

http://docs.jboss.org/hibernate/orm/5.0/quickstart/html/

 entityManager = entityManagerFactory.createEntityManager();
    entityManager.getTransaction().begin();
    List<Event> result = entityManager.createQuery( "from Event", Event.class).getResultList();
    for ( Event event : result )
    {
        System.out.println( "Event (" + event.getDate() + ") : " + event.getTitle() );

}
entityManager.getTransaction().commit();
entityManager.close();

标签: hibernatetransactions

解决方案


是的,它确实可以在没有定义事务边界的情况下工作,因此乍一看似乎有点多余。

问题是如果你不使用交易会发生什么?在这篇博文中,您可以了解在(不)使用事务时可能发生的事务属性、隔离级别和“现象”。此类现象有“脏读”、“幻读”、“不可重复”读。通过使用事务(和正确的隔离级别),您可以确保不会遇到这些问题。

TL;DR 一旦多个人/进程同时使用数据库,在查询数据库时使用事务就很重要。(即并发)通过使用事务边界,您正在消除(至少部分)由并发数据库使用引入的问题。


推荐阅读