Oracle 从Hibernate 4.3.6升级到Hibernate 5.1.0,在命名参数不工作的情况下执行存储过程

Oracle 从Hibernate 4.3.6升级到Hibernate 5.1.0,在命名参数不工作的情况下执行存储过程,oracle,hibernate,jpa,stored-procedures,named-parameters,Oracle,Hibernate,Jpa,Stored Procedures,Named Parameters,我们刚刚升级到hibernate 5.1.0完全相同的代码在4.3.6中运行良好。我们在JPA2.1规范之后使用命名参数进行了一些oracle过程调用。在我们的例子中,我们有一个有3个In参数和2个OUT参数的过程。所有参数都是基本数据类型(数字或VARCHAR) 我尝试了JPA2.1规范方法,也尝试了特定于hibernate的方法。两者都因同样的原因失败了 我们得到以下错误: 原因:java.sql.SQLException:参数名称的数量与注册的参数数量不匹配 我认为这个错误是错误的,因为。

我们刚刚升级到hibernate 5.1.0完全相同的代码在4.3.6中运行良好。我们在JPA2.1规范之后使用命名参数进行了一些oracle过程调用。在我们的例子中,我们有一个有3个In参数和2个OUT参数的过程。所有参数都是基本数据类型(数字或VARCHAR)

我尝试了JPA2.1规范方法,也尝试了特定于hibernate的方法。两者都因同样的原因失败了

我们得到以下错误:

原因:java.sql.SQLException:参数名称的数量与注册的参数数量不匹配

我认为这个错误是错误的,因为。1) 因为它在使用4.3.6和2)时运行良好,所有输入参数都已注册和绑定。Out参数不会被绑定,但会被注册

我们使用的是OracleJDBC驱动程序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 + "'");
    }
我们有一个类似的问题(从4.3.7更新到5.1.0)。错误消息来自JDBC驱动程序,表示“顺序绑定和命名绑定不能组合”。我们现在使用的是5.0.1版,在我们的案例中是有效的。