当前位置:  开发笔记 > 编程语言 > 正文

在多个结果集的情况下,Hibernate不符合JPA的NamedStoredProcedureQuery

如何解决《在多个结果集的情况下,Hibernate不符合JPA的NamedStoredProcedureQuery》经验,为你挑选了0个好方法。

我最近一直在尝试使用带有多个REF_CURSOR结果集的JPA 2.1 NamedStoredProcedureQuery注释,到目前为止我试图使用Hibernate版本5.1.3-FINAL和Oracle 11g(尝试过的JDBC驱动程序版本:10.2)一直没有成功. 0.2和11.2.0.3).

我认为在阅读JPA 2.1规范 3.10.17.1命名存储过程查询后,应该可以这样做,其中包含以下段落:

存储过程可能返回多个结果集.与本机查询一样,结果集的映射可以根据resultClasses或resultSetMappings注释元素指定.如果有多个结果集,则假定它们将使用相同的机制进行映射 - 例如,所有结果类映射都是映射,或者全部通过一组结果集映射进行映射

如果我使用的方法对于这个版本的Hibernate无效,或者我错过了一个关键的配置步骤,下面是采取的方法,希望有人能够指出我正确的方向:

@NamedStoredProcedureQuery(name = "multiResultSetExample", procedureName = "PACKAGE.p_stored_procedure", resultClasses = {ResultEntityOne.class, ResultEntityTwo.class}, parameters = {
            @StoredProcedureParameter(mode = ParameterMode.REF_CURSOR, type = void.class),
            @StoredProcedureParameter(mode = ParameterMode.REF_CURSOR, type = void.class),
            @StoredProcedureParameter(mode = ParameterMode.IN, type = String.class)
        }
    )
    @Entity
    public class ResultEntityOne {
    …
    }

上面的查询调用如下,但在检查结果时,只映射上面NamedStoredProcedureQuery resultClasses属性中指定的第一个类:

EntityManagerFactory entityManagerFactory = (EntityManagerFactory) ctx.getBean("entityManagerFactory");
EntityManager entityManager = entityManagerFactory.createEntityManager();
StoredProcedureQuery storedProcedureQuery = entityManager.createNamedStoredProcedureQuery("multiResultSetExample ");
storedProcedureQuery.setParameter(3, "PARAM");
List resultList = storedProcedureQuery.getResultList(); // only returns a single result set containing list of ResultEntityOne instances

为了支持上述方法的有效性,值得注意的是,当切换到Eclipselink 2.6.4时,它完全按预期工作,无需对上面的代码片段中突出显示的注释进行任何更改.

Hibernate不符合JPA 2.1吗?或者我在这里遗失了什么?

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有