为什么我不能在休眠改变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:

尽量在它们括起来。

+0

其实我解决它 hibernateTemplate.execute(新HibernateCallback (){ @覆盖 公众用户doInHibernate(会话sn)抛出HibernateException sn.save(用户); 返回用户; } }); –

+0

非常不寻常的方法..但如果它的工作.. –

+0

它的工作,当我添加交易也工作 –

可以使HibernateTemplate的对象和覆盖EXCUTE方法