从Hibernate 4.3.6升级到Hibernate 5.1.0执行存储过程,命名参数不起作用

时间:2016-04-20 16:53:23

标签: oracle hibernate jpa stored-procedures named-parameters

我们刚刚升级到hibernate 5.1.0。 完全相同的代码在4.3.6 中正常运行。我们在JPA 2.1规范中使用命名参数进行了一些oracle过程调用。在我们的例子中,我们有一个具有3个IN参数和2个OUT参数的过程。所有参数都是基本数据类型(NUMBERS或VARCHAR)。

我尝试了两种JPA 2.1 spec方法,并尝试了hibernate特定的方法。两者都因同样的原因失败了。

我们收到以下错误:

引起:java.sql.SQLException:参数名称的数量与注册的praremeters数量不匹配

我认为错误是错误的,因为。 1)因为它使用4.3.6和2)正常工作所有参数都被注册和绑定。 Out参数不受约束,但会被注册。

我们正在使用oracle jdbc驱动程序11.2.0.2。

示例代码:

    public void testStoredProcedureUsingEntityManagerDirectly() {
        final EntityManager em = anyBean.getEntityManager(); 
        final StoredProcedureQuery proc = em.createStoredProcedureQuery("myschema.my_package.my_proc");
        proc.registerStoredProcedureParameter("p_paramName1", String.class, ParameterMode.IN);
        proc.registerStoredProcedureParameter("p_paramName2", String.class, ParameterMode.IN);
        proc.registerStoredProcedureParameter("p_paramName3", String.class, ParameterMode.IN);
        proc.registerStoredProcedureParameter("o_outParam1", Long.class, ParameterMode.OUT);
        proc.registerStoredProcedureParameter("o_outParam2", String.class, ParameterMode.OUT);
        proc.setParameter("p_paramName1", "some.name@myemail.com");
        proc.setParameter("p_paramName2", "Company Name");
        proc.setParameter("p_paramName3", "ABC12344444");
        proc.execute();
        final Long orgSeqNum = (Long) proc.getOutputParameterValue("o_outParam1");
        final String activeIndicator = (String) proc.getOutputParameterValue("o_outParam2");
        System.out
            .println("Output: o_org_seq_num = '" + orgSeqNum + "', o_org_set_already = '" + activeIndicator + "'");
    }

0 个答案:

没有答案