我有一个更新过程,用于使用休眠模式更新数据库。以下是我的代码的一部分:
CUser cUser;
cUser = cManager.findUserDetailById(userId);
// here is some logic to update cUser detail.
// update db
hibernate.merge( cUser );
然后按照以下步骤自动连接休眠模式:
@Autowired
protected HibernateTemplate hibernate;
这是我声明休眠bean的方式:
@Bean
public SessionFactory sessionFactory(EntityManagerFactory emf) {
return emf.unwrap(SessionFactory.class);
}
@Bean
public HibernateTemplate hibernateTemplate(SessionFactory sessionFactory) {
return new HibernateTemplate(sessionFactory);
}
这在休眠3期间工作正常。但是,当我升级到休眠5后,它将出现以下错误:
2018-08-02 11:19:59,828 ERROR [com.common.ui.extension.ExceptionHandler] (default task-12) Exception occurred: 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.hibernate5.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1126)
at org.springframework.orm.hibernate5.HibernateTemplate$22.doInHibernate(HibernateTemplate.java:760)
at org.springframework.orm.hibernate5.HibernateTemplate.doExecute(HibernateTemplate.java:341)
at org.springframework.orm.hibernate5.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:309)
at org.springframework.orm.hibernate5.HibernateTemplate.merge(HibernateTemplate.java:756)
我发现休眠3和休眠5中的checkWriteOperationAllowed
方法是不同的。但是仍然不了解此更改的目的是什么。可以帮忙吗?
答案 0 :(得分:0)
尝试为会话设置刷新模式,例如:
@Before
public void sessionInitMethod(){
sessionFactory.getCurrentSession().setFlushMode(FlushMode.AUTO);
}