2016-01-06 35 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()

它应该工作。