从休眠3升级到休眠5后,InvalidDataAccessApiUsageException

时间:2018-08-02 09:51:05

标签: java spring hibernate migration

我有一个更新过程,用于使用休眠模式更新数据库。以下是我的代码的一部分:

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方法是不同的。但是仍然不了解此更改的目的是什么。可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

尝试为会话设置刷新模式,例如:

@Before
public void sessionInitMethod(){
    sessionFactory.getCurrentSession().setFlushMode(FlushMode.AUTO);
}