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。

  • 相关阅读:
    使用.Net Core+IView+Vue集成上传图片功能
    Vue基于vue-quill-editor富文本编辑器使用心得
    Fiddler原理~知多少?
    ASP.NET Core WebApi中简单像素转换跟踪实现
    利用SQL Profiler 追踪数据库操作
    ASP.NET Core Web API 版本控制
    处理SQL Server中的重复行
    【3分钟就会系列】使用Ocelot+Consul搭建微服务吧!
    ASP.NET Core WebAPI控制器返回类型的最佳选项
    花10分钟搞懂开源框架吧
  • 原文地址:https://www.cnblogs.com/SangBigYe/p/3455761.html
Copyright © 2011-2022 走看看