hibernate异常:解决Hibernate的Write operations are not allowed in read-only mode (FlushMode.NEVER) .....
报错:
Write operations are not allowed in read-only mode (FlushMode.NEVER) - turn your Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition
解决方法:
在方法体中加入
getHibernateTemplate().setFlushMode(HibernateTemplate.FLUSH_EAGER);
解决
另附未测试方法
方法2:重写OpenSessionInViewFilter
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
package cn.com.farben.framework.util;import org.hibernate.FlushMode;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.springframework.dao.DataAccessResourceFailureException;import org.springframework.orm.hibernate3.SessionFactoryUtils;public class OpenSessionInViewFilter extends org.springframework.orm.hibernate3.support.OpenSessionInViewFilter { protected Session getSession(SessionFactory sessionFactory) throws DataAccessResourceFailureException { Session session = SessionFactoryUtils.getSession(sessionFactory, true); session.setFlushMode(FlushMode.COMMIT); return session; } protected void closeSession(Session session, SessionFactory factory) { session.flush(); super.closeSession(session, factory); }} |
配置web.xml:
|
1
2
3
4
5
6
7
8
9
10
11
12
|
<filter> <filter-name>hibernateFilter</filter-name> <filter-class>cn.com.farben.framework.util.OpenSessionInViewFilter</filter-class> <init-param> <param-name>singleSession</param-name> <param-value>true</param-value> </init-param></filter><filter-mapping> <filter-name>hibernateFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> |
总结:
Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove ‘readOnly’ marker from transaction definition.
很明显,从上面的异常信息可以清晰地知道在事务切入的方法中(数据库写入操作)必须将session设置为FlushMode.COMMIT或者FlushMode.AUTO。

浙公网安备 33010602011771号