关于这个主题有很多问题,但我仍然不清楚事务中管理会话的过程。
假设有一些回购:
@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();
}
}
这段代码正确吗?每次操作运行时,我真的需要手动打开和关闭(以及刷新和清除)会话吗?我可以getCurrentSession()
改用而忘记刷新和关闭(因为我猜交易可能会照顾我的生命周期)?