在Java Hibernate中,当我们需要处理DB时,我们需要: 1.打开会话2.开始事务3.完成事务4.关闭会话
为什么getStudentList()中没有事务?提前感谢
发布于 2016-08-10 20:15:08
这个hibernate 文章解释了在事务中没有显式执行的SELECT操作的行为。
本文给出了下面的示例,但对于查询示例也是如此。
Session = sessionFactory.openSession(); session.get(Item.class,123 l); session.close();
这个问题的答案是,“视情况而定!”当在连接上调用close()时,JDBC规范没有提到挂起的事务。发生什么取决于供应商如何实现规范。例如,对于Oracle JDBC驱动程序,对close()的调用提交了事务!大多数其他JDBC供应商采用相同的路由,并在JDBC连接对象关闭并将资源返回到池时回滚任何挂起的事务。很明显,这不会是选择的问题.
让我们扩展上面的例子来引发一个可能的问题。
Session session = sessionFactory.openSession();
Item item = session.get(Item.class, 123l);
item.setPrice(10);
session.close();现在,它取决于JDBC驱动程序是否保留了Item的新价格。
因此,您可以忽略在纯SELECT操作上开始和提交事务,即使您的JDBC驱动程序将回滚事务,只要您没有数据库更改。
但无论如何,我强烈建议在任何操作中使用交易,以避免误解和问题。
https://stackoverflow.com/questions/38878550
复制相似问题