解决Hibernate Write operations are not allowed in read-only mode的方法

错误信息:

org.springframework.dao.InvalidDataAccessApiUsageException: 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.

解决方法:

方法1:在出现异常的方法中加入

1 getHibernateTemplate().setFlushMode(HibernateTemplate.FLUSH_EAGER);

方法2:重写OpenSessionInViewFilter 

 1 package cn.com.farben.framework.util;

 2  

 3 import org.hibernate.FlushMode;

 4 import org.hibernate.Session;

 5 import org.hibernate.SessionFactory;

 6 import org.springframework.dao.DataAccessResourceFailureException;

 7 import org.springframework.orm.hibernate3.SessionFactoryUtils;

 8  

 9 public class OpenSessionInViewFilter extends

10         org.springframework.orm.hibernate3.support.OpenSessionInViewFilter {

11     protected Session getSession(SessionFactory sessionFactory)

12             throws DataAccessResourceFailureException {

13         Session session = SessionFactoryUtils.getSession(sessionFactory, true);

14         session.setFlushMode(FlushMode.COMMIT);

15         return session;

16     }

17  

18     protected void closeSession(Session session, SessionFactory factory) {

19         session.flush();

20         super.closeSession(session, factory);

21     }

22 }

配置web.xml:

 1 <filter>

 2     <filter-name>hibernateFilter</filter-name>

 3     <filter-class>cn.com.farben.framework.util.OpenSessionInViewFilter</filter-class>

 4     <init-param>

 5         <param-name>singleSession</param-name>

 6         <param-value>true</param-value>

 7     </init-param>

 8 </filter>

 9 <filter-mapping> 

10     <filter-name>hibernateFilter</filter-name>  

11     <url-pattern>/*</url-pattern> 

12 </filter-mapping>

你可能感兴趣的:(Hibernate)