hibernate - 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();
解决方案
是的,它确实可以在没有定义事务边界的情况下工作,因此乍一看似乎有点多余。
问题是如果你不使用交易会发生什么?在这篇博文中,您可以了解在(不)使用事务时可能发生的事务属性、隔离级别和“现象”。此类现象有“脏读”、“幻读”、“不可重复”读。通过使用事务(和正确的隔离级别),您可以确保不会遇到这些问题。
TL;DR 一旦多个人/进程同时使用数据库,在查询数据库时使用事务就很重要。(即并发)通过使用事务边界,您正在消除(至少部分)由并发数据库使用引入的问题。
推荐阅读
- python - 使用 xpath 和 regex 获取单个链接上的文本
- c# - 重定向到另一个页面后如何保留树视图?
- javascript - React,我怎样才能获得电影 ID 并使用它们来获取数据,让我链接到他们的供应商?
- cordova - ionic 不反映在 src 文件夹中所做的更改
- c# - 如何通过 C# 捕获和记录所有进程调用的所有 WMI 事件
- android-studio - 为什么当我尝试从 android studio 终端拉取时,Github 总是要求提供登录凭据?
- docker - 如何将 exitCode 从程序传递到 Docker 容器?
- python - 如何为 CSV 文件添加标题
- python - 检测小图像中斑点的位置
- flutter - 我在某些小部件中遇到 stackoverflowerror,但我不知道为什么以及这个错误是什么