zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    面试干货——年底干货大放送,你准备好了吗?(转)
    JavaScript学习 三、变量、作用域和内存
    JavaScript学习 二、基础
    JavaScript学习 一、简介
    从统计看机器学习常见算法
    [zz]unity 性能优化
    游戏统计指标
    [zz]sql优化相关
    [zz]sql语句执行顺序
    unity 链接
  • 原文地址:https://www.cnblogs.com/SangBigYe/p/3455761.html
Copyright © 2011-2022 走看看