【问题标题】:Does Hibernate find operations require transaction?Hibernate 查找操作是否需要事务?
【发布时间】:2018-10-25 03:28:36
【问题描述】:

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

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();

【问题讨论】:

标签: hibernate transactions


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2022-07-05
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 2021-03-29
    • 1970-01-01
    相关资源
    最近更新 更多