小编典典

Spring/Hibernate:每次VS getCurrentSession时打开/关闭会话

hibernate

这些方法之间有什么区别,哪种更好?到现在为止,我的代码如下:

public void delete(Song song) {
    session = sessionFactory.getCurrentSession();
    session.delete(song);
    session.flush();
}

但是在运行上述代码时,记录并不总是被删除(精确地:id = 1永远不会被删除,而其他id总是被删除)。我读到保持打开的会话可以稍微加快应用程序的速度-
这就是为什么我要共享会话对象。我的业务对象通过DI获取会话工厂:

@Autowired
private SessionFactory sessionFactory;

Session session = null;

public void setSessionFactory(SessionFactory sessionFactory) {
    this.sessionFactory = sessionFactory;
}

阅读 260

收藏
2020-06-20

共1个答案

小编典典

根据我在Hibernate的经验,得出的结论是,最好的策略是使Hibernate会话寿命与单个事务的持续时间相匹配。根据您的特定需求,您可能还需要做其他事情,但是我敢相信,提议的策略可以在95%的实际案例中起作用。

2020-06-20