报错:
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。