为什么我不能在休眠改变flushmode
问题描述:
org.springframework.dao.InvalidDataAccessApiUsageException:写 操作都没有只读模式(FlushMode.MANUAL)允许:打开 您的会话到FlushMode.COMMIT/AUTO或删除'readOnly'标记 来自交易定义。为什么我不能在休眠改变flushmode
我试着在代码和xml中将其更改为另一个flushmode
但它仍然是自动的。
hibernatetemplate.getSessionFactory().openSession().setFlushMode(FlushMode.COMMIT);
和<prop key="org.hibernate.FlushMode">COMMIT</prop>
答
其实我解决它
final Person object = new Person(id, name, password);
hibernateTemplate.execute(new HibernateCallback<Person>() {
public Person doInHibernate(Session session)
throws HibernateException {
session.save(object);
session.flush();
return object;
}
});
答
最有可能你的行动,其中一些是persiting或更新实体,在会话不是事务上下文中。
Session session = hibernatetemplate.getSessionFactory().openSession();
Transaction tx = session.beginTrasaction();
...
tx.commit();
session.close();
现在,当你开始交易,刷新模式应该被隐设置为COMMIT/AUTO:
尽量在它们括起来。
答
可以使HibernateTemplate的对象和覆盖EXCUTE方法
其实我解决它 hibernateTemplate.execute(新HibernateCallback(){ @覆盖 公众用户doInHibernate(会话sn)抛出HibernateException sn.save(用户); 返回用户; } }); –
非常不寻常的方法..但如果它的工作.. –
它的工作,当我添加交易也工作 –