spring / hibernate:每次VS getCurrentSession打开/关闭会话

时间:2013-03-06 20:05:53

标签: spring hibernate session

这些方法之间有哪些区别,哪个更好?到目前为止,我正在使用以下代码:

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

1 个答案:

答案 0 :(得分:2)

根据我对Hibernate的经验,我得出的结论是,最好的策略是将Hibernate会话生命周期与单个事务的持续时间相匹配。根据您的具体需求,您可能需要做其他事情,但我敢打赌,建议的初学者将在95%的实际案例中起作用。