Hibernate发现操作需要事务吗?

时间:2018-05-15 10:21:07

标签: hibernate transactions

一般来说,我认为选择查询不需要交易。只有创建和更新操作需要事务。但是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();

1 个答案:

答案 0 :(得分:1)

是的,确实无法定义事务边界,因此乍一看似乎有点多余。

问题是如果您不使用交易会发生什么? In this blog post您可以阅读有关事务属性,隔离级别以及(不)使用事务时可能发生的“现象”。这种现象是“脏读”,“幻读”,“不可重复”读。通过使用事务(以及正确的隔离级别),您可以确保不会遇到这些问题。

<强> TL; DR 一旦多个人/进程同时使用数据库,在查询数据库时使用事务就很重要。 (即并发)使用事务边界,您将消除(至少某些)并发数据库使用引入的问题。

相关问题