Java 从hibernate 3升级到hibernate 5后出现InvalidDataAccessApiUsageException
我有一个使用hibernate更新数据库的更新过程。以下是我的代码的一部分:Java 从hibernate 3升级到hibernate 5后出现InvalidDataAccessApiUsageException,java,spring,hibernate,migration,Java,Spring,Hibernate,Migration,我有一个使用hibernate更新数据库的更新过程。以下是我的代码的一部分: CUser cUser; cUser = cManager.findUserDetailById(userId); // here is some logic to update cUser detail. // update db hibernate.merge( cUser ); 我自动连接了hibernate,如下所示: @Autowired protected HibernateTemplate hibe
CUser cUser;
cUser = cManager.findUserDetailById(userId);
// here is some logic to update cUser detail.
// update db
hibernate.merge( cUser );
我自动连接了hibernate,如下所示:
@Autowired
protected HibernateTemplate hibernate;
下面是我声明hibernate bean的方法:
@Bean
public SessionFactory sessionFactory(EntityManagerFactory emf) {
return emf.unwrap(SessionFactory.class);
}
@Bean
public HibernateTemplate hibernateTemplate(SessionFactory sessionFactory) {
return new HibernateTemplate(sessionFactory);
}
这在hibernate 3期间工作正常。但是,升级到hibernate 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)
我发现hibernate 3和hibernate 5中的
checkWriteOperationAllowed
方法不同。但仍然不明白这一变化的目的是什么。是否有帮助?尝试为会话设置刷新模式,例如:
@Before
public void sessionInitMethod(){
sessionFactory.getCurrentSession().setFlushMode(FlushMode.AUTO);
}
手动更改刷新模式可以吗?我关心的是为什么hibernate 5会抛出异常,但hibernate 3没有问题。@Panadol可能hibernate会更改默认刷新策略。需要rtfm吗