错误类型:
HTTP Status 500 - Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.MANUAL):
Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.
尝试解决方案 1:在web.xml下配置如下代码(行不通)
<filter>
<filter-name>openSession</filter-name>
<filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
<init-param>
<param-name>sessionFactoryBeanName</param-name>
<param-value>sessionFactory</param-value>
</init-param>
<init-param>
<param-name>singleSession</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name> flushMode </param-name>
<param-value>AUTO </param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>openSession</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2:利用spring的事物管理机制(行不通)
<!-- 声明一个切面 -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="save" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="update" propagation="REQUIRED" rollback-for="Exception"/>
<tx:method name="get*" propagation="REQUIRED" read-only="true" rollback-for="Exception"/>
</tx:attributes>
</tx:advice>
<!-- 把切面注入到业务中 -->
<aop:config>
<aop:pointcut id="businessService" expression="execution(public * com.yanxi.service.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="businessService"/>
</aop:config>
3:网上百度后解决方案(利用sessionFactory自己写save和update方法)
public Book save(Book book) {
Session session= sessionFactory.getCurrentSession();
session.beginTransaction();
session.save(book);
session.getTransaction().commit();
session.close();
System.out.println("a book save success ");
return null;
}
还没有找到其它更好的解决方案,反正这个问题困扰我好久时间了 哎