繁体   English   中英

带有 Hibernate 的存储过程在嵌入式 h2 数据库中失败

[英]Stored procedure with Hibernate fails in embedded h2 database

我将数据保存到 myRepository1 并能够通过物化视图查看节省的内容,我需要刷新它。

      myRepository1.save(myObject);
      myRepository2.refreshView();

myRepository2 有:

        @Modifying
        @Query(value = "BEGIN my_refresh_view(); END;", nativeQuery = true)
        void refreshView();

其中 my_refresh_view 是一个简单的存储过程。 这在现实世界 (Oracle DB) 中工作正常 - 但是,当我使用嵌入式 h2 数据库为上述代码运行集成测试时,我得到:

BEGIN my_refresh_view(); END; [42000-200]
org.springframework.dao.InvalidDataAccessResourceUsageException could not prepare statement;
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:281)
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:255)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:528)
    at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61)

看起来存储过程和 h2 不太匹配。

任何想法如何使它工作,或者可能有解决方法?

Hibernate JPA(至少 5.0.0 及以下)不支持 H2Dialect 的存储过程。H2Dialect 继承 Dialect.getCallableStatementSupport(),它返回 StandardCallableStatementSupport.NO_REF_CURSOR_INSTANCE。 标准的可调用语句支持没有正确处理 H2 “out” 参数,该参数是 Java 返回值而不是语句参数检查详情

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM