hibernate异常:解决Hibernate的Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL):

来源:互联网 发布:js中单双引号 编辑:程序博客网 时间:2024/05/30 12:03

hibernate异常:解决Hibernate的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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
packagecn.com.farben.framework.util;
 
importorg.hibernate.FlushMode;
importorg.hibernate.Session;
importorg.hibernate.SessionFactory;
importorg.springframework.dao.DataAccessResourceFailureException;
importorg.springframework.orm.hibernate3.SessionFactoryUtils;
 
publicclass OpenSessionInViewFilter extends
        org.springframework.orm.hibernate3.support.OpenSessionInViewFilter {
    protectedSession getSession(SessionFactory sessionFactory)
            throwsDataAccessResourceFailureException {
        Session session = SessionFactoryUtils.getSession(sessionFactory, true);
        session.setFlushMode(FlushMode.COMMIT);
        returnsession;
    }
 
    protectedvoid 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。

0 0