是“session.getTransaction().commit();”获取数据时在hibernate中需要
我想知道 是是“session.getTransaction().commit();”获取数据时在hibernate中需要,hibernate,Hibernate,我想知道 是session.getTransaction().commit() private List listEvents() { Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); List result = session.createQuery("from Event").list();
session.getTransaction().commit()获取数据时在hibernate中需要代码>
private List listEvents() {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
List result = session.createQuery("from Event").list();
session.getTransaction().commit();
return result;
}
这个例子取自AFAIK:在大多数情况下,这并不重要。这两种方法(提交/回滚)都是有效的
但是推荐的方法是提交,因为关系数据库针对最常见的预期情况进行了性能优化,即提交,而不是回滚
更新:
如果您想知道为什么要启动事务,可以看看下面的内容。是的,即使对于读取操作,您也需要一个事务,并且应该按照hibernate文档提交它
详情如下:
数据库或系统事务边界始终是必需的。不
与数据库的通信可以在数据库外部进行
事务(这似乎让许多习惯于
自动提交模式)始终使用清晰的事务边界,即使对于
只读操作。取决于您的隔离级别和数据库
这可能不是必需的功能,但如果
您总是明确地划分事务。当然可以,单人间
数据库事务将比许多小型事务执行得更好
事务,甚至用于读取数据
对于普通JDBC,默认情况下会启用自动提交。详情如下:
创建连接时,连接处于自动提交模式。这意味着
每个单独的SQL语句都被视为一个事务,并且
执行后立即自动提交。(更多信息
确切地说,默认情况下,SQL语句在被提交时提交
已完成,而不是在执行时。当所有
它的结果集和更新计数已检索。在
但是,所有案件都已完成陈述,因此已提交,
就在它被执行之后。)
但是,为什么需要它却各不相同。良好的实践是为每个DB操作打开事务。此外,事务还可用于确保没有其他事务添加导致视图不一致的数据。