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。

  • 相关阅读:
    hi.baidu.com 百度流量统计
    Autofac is designed to track and dispose of resources for you.
    IIS Manager could not load type for module provider 'SharedConfig' that is declared in administration.config
    How to create and manage configuration backups in Internet Information Services 7.0
    定制swagger的UI
    NSwag在asp.net web api中的使用,基于Global.asax
    NSwag Tutorial: Integrate the NSwag toolchain into your ASP.NET Web API project
    JS变量对象详解
    JS执行上下文(执行环境)详细图解
    JS内存空间详细图解
  • 原文地址:https://www.cnblogs.com/SangBigYe/p/3455761.html
Copyright © 2011-2022 走看看