当我将我的应用程序从Spring 1.0升级到Hibernate 3.0.5到使用Spring 4.0.6的Hibernate 4.3.5.Final时,我得到以下异常。
Caused by: 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.
at org.springframework.orm.hibernate4.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1135)
at org.springframework.orm.hibernate4.HibernateTemplate$26.doInHibernate(HibernateTemplate.java:826)
at org.springframework.orm.hibernate4.HibernateTemplate.doExecute(HibernateTemplate.java:340)
at org.springframework.orm.hibernate4.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:308)
at org.springframework.orm.hibernate4.HibernateTemplate.deleteAll(HibernateTemplate.java:823)
...
我花了几天时间做了一些研究,尝试了不同的事情,并问了下面的问题: How can I globally set FlushMode for Hibernate 4.3.5.Final with Spring 4.0.6?
似乎我可以使用2种情况,但我仍然没有找到推荐的方法。
方法1:
实现OpenSessionInViewFilter的自定义版本,将默认的FlushMode设置为AUTO。
方法2:
使用TransactionManager,并将@Transactional注释添加到对数据库具有写访问权限的每个方法。 这可以通过以下方式完成:Spring Hibernate transaction management
任何人都可以提供任何建议,或者指出与&#34相关的任何文档;从版本x.x.x开始,这就是我们现在应该如何实现Hibernate的方式!"
非常感谢