2017-04-23 49 views
1

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>

回答

0

其實我解決它

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; 
     } 
    }); 
1

最有可能你的行動,其中一些是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

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

1

可以使HibernateTemplate的對象和覆蓋EXCUTE方法