我有一個應用程序,我目前正在使用Spring和Hibernate進行編寫。在我的服務層中,我注入了一個DAO,它將執行一些非常基本的CRUD操作。對於笑容,我已經創建註釋的方法如下:使用HIbernate和Spring的@Transactional註解不能保持數據
@Transactional(readOnly = false, propogation=Propogation.REQUIRES_NEW)
public void doSomeWork(Dao dao, Entity e){
//do some searching
dao.persist(e);
dao.findAll(Entity.clz);
}
的道persist方法是這樣的:
public void persist(Entity e){
session.saveOrUpdate(e); //This has already been built using a SessionFactory
}
在DAO的findAll方法看起來像這樣
public void findAll(Class clz) {
session.createCriteria(clz).list();
}
現在,一切似乎都在運行,好的。在插入(保留)我的對象後,我可以使用findAll方法(以及它由Data Store分配的新的主鍵ID)查看它,但是,當「doSomeWork」方法完成時,我的數據實際上並不實際堅持到底層數據存儲(Oracle 10g)。但是,如果我刪除@Transactional註釋並使用Hibernate的session.getTransaction()。begin()和session.getTransaction()。commit()(或回滾),則代碼按我預期的方式工作。
因此,我的底層問題是:Hibernate是否實際上並未將Spring的事務管理用於實際事務管理?
在我的bean配置文件中,我聲明瞭一個TransactionManager bean,一個SessionFactory bean,並且我也包含在配置文件中。
我可能會錯過什麼,除了更好地瞭解Spring和Hibernate?
顯示你的配置文件 – axtavt 2010-02-02 18:56:41
對不起...這有點令人困惑...我用@Repository註釋創建DAO ... – 2010-02-02 19:58:40