我有一个现有的对象在一个事务中改变了不同的东西:
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中保留,但其他更改(如状态和颜色)不会。
答案 0 :(得分:0)
默认情况下,Hibernate使用AUTO
策略来保存您的数据,使用此选项Hibernate将决定何时应该继续提高其性能,您可以做的是将session
刷新模式更改为ALWAYS
喜欢这样:
session.setFlushMode(FlushMode.ALWAYS);
或者您可以像这样强制flush
:
session.flush()
它应该有用。