当我刷新它时,Hibernate不会保存实体

时间:2016-01-06 12:31:01

标签: java hibernate

我有一个现有的对象在一个事务中改变了不同的东西:

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

更改仍然存在且工作正常。但是,当我在newTx中执行1)然后在2)我没有在对象上看到externalIdentifier所以我在2)之前加载并刷新。不幸的是2,3,4并没有改变数据库中的任何内容,而是我在调试中看到更改的字段..

当我在newTx中执行setExternalIdentifier时出现问题,然后ExternalIdentifier在db immidiatelly中保留,但其他更改(如状态和颜色)不会。

1 个答案:

答案 0 :(得分:0)

默认情况下,Hibernate使用AUTO策略来保存您的数据,使用此选项Hibernate将决定何时应该继续提高其性能,您可以做的是将session刷新模式更改为ALWAYS喜欢这样:

session.setFlushMode(FlushMode.ALWAYS);

或者您可以像这样强制flush

session.flush()

它应该有用。