1. 问题。

    开启OpenSessionInViewFilter来阻止延迟加载的错误的时候抛出了这个异常:org.springframework.dao.InvalidDataAccessApiUsageException错误

    但是在我们开启OpenSessionInViewFilter这个过滤器的时候FlushMode就已经被默认设置为了MANUAL!

    如果FlushMode是MANUAL或NEVEL,在操作过程中 hibernate会将事务设置为readonly,所以在增加、删除或修改操作过程中会出现如下错误:

    org.springframework.dao.InvalidDataAccessApiUsageException:

    Write operations are not allowed in read-only mode (FlushMode.NEVER) turn your Session into FlushMode.AUTO or remove ‘readOnly’ marker from transaction definition;

  1. 我谷歌还有百度很多的地方都是通过修改OpenSessionInViewFilter 来解决的
    ​​​解决的办法​​​
    ​​​解决2​​​
    但是 org.springframework.orm.hibernate4.support.OpenSessionInViewFilter; 中没有这个set的参数,我们需要去重写这个方法

然后配置在我们的web.xml 中放置这个拦截群

package com.hdu.cms.common.HibernateUtilExtentions;

import org.hibernate.FlushMode;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.dao.DataAccessResourceFailureException;
import org.springframework.orm.hibernate4.support.OpenSessionInViewFilter;

/**
* Created by JetWang on 2016/10/16.
*/
public class OpensessionInViewFliterOver extends OpenSessionInViewFilter {
@Override
protected Session openSession(SessionFactory sessionFactory) throws DataAccessResourceFailureException {
try {
Session session = sessionFactory.openSession();
session.setFlushMode(FlushMode.AUTO);
return session;
} catch (HibernateException ex) {
throw new DataAccessResourceFailureException("Could not open Hibernate Session", ex);
}
}
}