Spring JPA存储过程是否为空值?

时间:2016-04-25 15:25:03

标签: java sql spring spring-data-jpa

我有一个存储过程,它正在从JpaRepository实现中调用

@Repository
public interface DataMartRepo extends JpaRepository<DataMartDAO, String> {

    @Procedure(procedureName = "dbo.txn_ETL")
    public void txnETL(
        @Param("txId") String txId,
        @Param("inId") String inId,
        @Param("proc") String proc,
        @Param("qtys") String qtys);

现在,这工作正常,期望当“proc”为空值时,在这种情况下它会引发异常:

SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/Authenticator] 
threw exception [Request processing failed; nested exception is org.springframework.orm.jpa.JpaSystemException: 
    Error calling CallableStatement.getMoreResults; nested exception is org.hibernate.exception.GenericJDBCException: 
    Error calling CallableStatement.getMoreResults] with root cause
com.microsoft.sqlserver.jdbc.SQLServerException: The value is not set for the parameter number 3.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.buildParamTypeDefinitions(SQLServerPreparedStatement.java:260)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.buildPreparedStrings(SQLServerPreparedStatement.java:219)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doPrepExec(SQLServerPreparedStatement.java:612)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:400)
[...]

如何处理空值?将所有字符串设置为“”不提供空插入。

1 个答案:

答案 0 :(得分:1)

看起来SP调用中带空值的参数是开放问题。请参阅https://hibernate.atlassian.net/browse/HHH-9007