Dmy*_*tov 5 spring hibernate transactions
关于这个主题有很多问题,但我仍然不清楚在事务中管理会话的过程.
我们假设有一些回购:
@Repository
public class SomeRepository {
@Autowired
protected SessionFactory sessionFactory;
@Transactional
public void doSomething() throws IOException {
Session session = getSession();
List<SomeEntity> someEntities = session.createCriteria(SomeEntity.class).list();
for (int i = index; i < someEntities.size(); i++) {
/* Some ops with entities */
if (i % 100 == 0) {
session.flush();
session.clear();
}
}
session.close;
}
protected Session getSession() {
return sessionFactory.openSession();
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码是否正确?每次操作运行时,我是否真的需要手动打开和关闭(以及刷新和清除)会话?我可以使用getCurrentSession()而忘记冲洗和关闭(因为我猜交易可能会照顾我的生命周期)?
JB *_*zet 10
不,这不对.要获取与当前Spring事务关联的会话,必须使用sessionFactory.getCurrentSession().
并且你永远不应该关闭会话:这是Spring的工作,它将在事务提交/回滚时关闭它,或者甚至稍后在open-session-in-view模式中使用它.
除了在Hibernate文档中描述的情况之外,通常不需要刷新,这包括在批量插入大量实体时避免增加第一级缓存的大小.在你的情况下,它没有意义.
| 归档时间: |
|
| 查看次数: |
9608 次 |
| 最近记录: |