2013-03-06 53 views
1

这些方法之间有什么区别,哪一个更好?到现在为止我遇到的代码片段如下所示:spring/hibernate:每次打开/关闭会话VS getCurrentSession

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; 
} 

回答

2

根据我的豁达与Hibernate,我得出的结论是,最好的策略是Hibernate的Session寿命与单个事务的持续时间相匹配。根据您的具体需求,您可能需要做其他的事情,但我敢打赌,95%的实际案例中提议的策略是可行的。