这些方法之间有什么区别,哪种更好?到现在为止,我的代码如下:
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; }
根据我在Hibernate的经验,得出的结论是,最好的策略是使Hibernate会话寿命与单个事务的持续时间相匹配。根据您的特定需求,您可能还需要做其他事情,但是我敢相信,提议的策略可以在95%的实际案例中起作用。