2013-03-06 74 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%的實際案例中提議的策略是可行的。