2016-01-06 84 views
0

我有現成的對象,在一個事務中改變不同的東西:休眠犯規保存實體,當我刷新

TX start 
0) Load object by id 

     public MyModel load (final Long objectId) { 
     return super.getHibernateTemplate().execute(new HibernateCallback<MyModel>() { 
      public MyModel doInHibernate (Session session) throws HibernateException, SQLException { 
       MyModel myModel = (MyModel)session.load(MyModel.class, objectId); 
       //optionally I do  session.refresh(myModel); 
       return myModel; 
      } 
     }); 
    } 
1) Change externalIdentifier 

public void setExternalIdentifier(Long objectId, Long externalIdentifier) { 
     MyModel myModel = myDAO.loadMyModel(objectId, null); 
     myModel.setExternalIdentifier(externalIdentifier); 
    } 

2) Change color 
3) Change state 
4) Dao.saveOrUpdate 
TX end 

變化是持久並能正常工作。但是,當我做1)在newTx然後在2)我沒有看到externalIdentifier對象,所以我加載和2)之前刷新。可惜的是2,3,4犯規不會改變數據庫althouhg什麼,我看到改變的調試領域..當我在做newTx setExternalIdentifier,然後ExternalIdentifier是堅持分貝immidiatelly但像狀態,顏色等變化不發生

問題。

+1

添加一些代碼,而不僅僅是一些步驟... –

回答

0

默認情況下,Hibernate使用的AUTO戰略,堅持你的數據,使用此選項Hibernate會決定什麼時候他要堅持以提高其性能,你可以做的是改變你的session沖洗模式ALWAYS這樣的:

session.setFlushMode(FlushMode.ALWAYS);

,或者你可以強制flush這樣的:

session.flush()

它應該工作。