JPA 2.1 - @NamedStoredProcedureQuery - ParameterMode.IN - null值给出错误

时间:2015-10-22 16:22:47

标签: java hibernate jpa stored-procedures jpa-2.1

我正在尝试使用JPA 2.1 @NamedStoredProcedureQuery调用存储过程。 我的Entity类中有以下注释。

问题是如果我将模式声明为ParameterMode.IN,我无法传递空值。并且只有在我将其声明为ParameterMode.INOUT时才能传递空值。

实体

@NamedStoredProcedureQuery(name = "employee", procedureName = "myProcedure", resultClasses = Employee.class,  parameters = {
        @StoredProcedureParameter(mode = ParameterMode.IN, name = "EMPLOYEE_PHONE", type = String.class),
        @StoredProcedureParameter(mode = ParameterMode.INOUT, name = "CITY", type = String.class)

存储库

        public Long createOrUpdateEmployee(Employee employee) throws EbaDataException {

            StoredProcedureQuery query = entityManager.createNamedStoredProcedureQuery("employee");

            query.setParameter("EMPLOYEE_PHONE", employee.getName());
            query.setParameter("CITY", employee.getCity());         
            query.execute();

        }

例如,如果我使用ParameterMode.IN为索引2(CITY)传递null,那么我会得到此异常。

Caused by: java.sql.SQLException: Missing IN or OUT parameter at index:: 2

1 个答案:

答案 0 :(得分:1)

根据此topic,您无法将空值作为参数传递。

  

我正在解释为JPA(特别是Hibernate)根本不支持设置null参数。看起来他们正在努力支持默认参数值,而不是在适当时替换空值。他们选择支持前者。看起来那些需要支持后者(可空值)的人必须使用java.sql.CallableStatement

你总是可以尝试将空字符串而不是null,我认为它应该可以工作。