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

时间:2017-01-25 16:57:54

标签: java oracle hibernate jpa-2.1

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

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

  

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

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

@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?或者我在这里遗漏了什么?

0 个答案:

没有答案