10

当您只执行一个查询而不删除或更新数据时,是否真的需要启动事务?

我目前正在使用带有 C3p0 的 Hibernate 4.1.9

例子,

session session = hibernateutil.getsessionfactory().opensession();
Transaction tx = session.beginTransaction();
List messages = session.createQuery("from Message m order by m.text asc").list();  
tx.commit();
session.close();

问候

4

1 回答 1

8

文档说:

数据库或系统事务边界始终是必需的。在数据库事务之外不能与数据库进行通信(这似乎使许多习惯于自动提交模式的开发人员感到困惑)。始终使用清晰的事务边界,即使是只读操作。根据您的隔离级别和数据库功能,这可能不是必需的,但如果您始终明确划分事务,则没有缺点。当然,单个数据库事务将比许多小型事务执行得更好,即使是读取数据也是如此。

(强调我的)

于 2013-04-04T15:36:29.853 回答