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。

  • 相关阅读:
    19、spring注解学习(声明式事务)——spring注解版声明式事务
    Visual C# 2015调用SnmpSharpNet库实现简单的SNMP元素查询
    SNMP协议交互学习-获取udp的udpindatagrams
    LwIP的SNMP学习笔记
    stm32f407使用Keil uV5建立工程日志
    IP unnumbered interface,某个接口不编号,某个接口不分配IP地址
    OSPFv3与OSPFv2协议的比较
    卫星网络-拓扑优化-文献笔记
    卫星轨道相关笔记SGP4
    [20190226]删除tab$记录的恢复6.txt
  • 原文地址:https://www.cnblogs.com/SangBigYe/p/3455761.html
Copyright © 2011-2022 走看看