为什么只读操作需要Hibernate中的Transaction?
以下交易是否在数据库中加锁?
从数据库中获取的示例代码:
Transaction tx = HibernateUtil.getCurrentSession().beginTransaction(); // why begin transaction?
//readonly operation here
tx.commit() // why tx.commit? I don't want to write anything
我可以使用 session.close()
代替 tx.commit()
吗?
原文由 user93796 发布,翻译遵循 CC BY-SA 4.0 许可协议
阅读交易可能看起来确实很奇怪,而且在这种情况下人们通常不会标记交易方法。但是 JDBC 无论如何都会创建事务,只是它将在
autocommit=true
中工作,如果没有明确设置不同的选项。但是将事务标记为只读有实际原因:对数据库的影响
对 ORM 的影响
对架构和干净代码的影响
无法保证您的方法不会写入数据库。如果您将方法标记为
@Transactional(readonly=true)
,您将决定是否 真的 可以在此事务范围内写入 DB。如果您的体系结构很麻烦,并且某些团队成员可能会选择将修改查询放在不期望的地方,则此标志会将您指向有问题的地方。