简体   繁体   English

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

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

Im saving data to myRepository1 and to be able to see the savings via the materialized view, i need to refresh it.我将数据保存到 myRepository1 并能够通过物化视图查看节省的内容,我需要刷新它。

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

myRepository2 has: myRepository2 有:

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

Where my_refresh_view is a simple stored procedure.其中 my_refresh_view 是一个简单的存储过程。 This works fine in the real world (Oracle DB) - however, when i run my integration tests for the code above using an embedded h2 database, i get:这在现实世界 (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)

Looks like the stored procedure and h2 dont match well together.看起来存储过程和 h2 不太匹配。

Any ideas how to make it work, or maybe there are workarounds?任何想法如何使它工作,或者可能有解决方法?

Hibernate JPA (at least 5.0.0 and below) does not support stored procedures for H2Dialect.H2Dialect inherits Dialect.getCallableStatementSupport() which returns StandardCallableStatementSupport.NO_REF_CURSOR_INSTANCE. Hibernate JPA(至少 5.0.0 及以下)不支持 H2Dialect 的存储过程。H2Dialect 继承 Dialect.getCallableStatementSupport(),它返回 StandardCallableStatementSupport.NO_REF_CURSOR_INSTANCE。 The standard callable statement support does not properly handle the H2 "out" parameter which is a Java return value and not a statement parameter check details here标准的可调用语句支持没有正确处理 H2 “out” 参数,该参数是 Java 返回值而不是语句参数检查详情

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

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