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。

  • 相关阅读:
    取出某个月有几天
    重建索引时,一些数值
    java代理概念
    java内部类和静态内部类
    Lamdba表达式的代码使用讲解
    java 中Vector的使用详解
    mysql 安装失败 start service执行不下去
    Mysql中ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8怎么转换为sql sever2008的代码
    通过命令行发送邮件
    Servlet开发总结(一)
  • 原文地址:https://www.cnblogs.com/SangBigYe/p/3455761.html
Copyright © 2011-2022 走看看