Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从hibernate 3升级到hibernate 5后出现InvalidDataAccessApiUsageException_Java_Spring_Hibernate_Migration - Fatal编程技术网

Java 从hibernate 3升级到hibernate 5后出现InvalidDataAccessApiUsageException

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

我有一个使用hibernate更新数据库的更新过程。以下是我的代码的一部分:

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吗