使用Hibernate在Spring Boot Rest API中将SQL Server存储过程中的nvarchar(max)输出参数截断为4000个字符

时间:2019-04-11 14:14:13

标签: sql-server hibernate spring-data-jpa sql-server-2017 nvarchar

我在SQL Server 2017中有一个存储过程,该存储过程在nvarchar(max)输出参数中以JSON形式返回数据。

我已经检查了通过在数据库上运行它来确保从存储过程中返回了整个结果集,并且一切正常。它会返回一个超过4000个字符的JSON字符串。

但是,在我的Spring Boot API中,使用Hibernate 5.3.7,输出被截断为4000个字符。

请问我如何解决此问题的任何想法?

我称为存储过程的代码:

    StoredProcedureQuery query = entityManager
            .createStoredProcedureQuery("usp_my_stored_proc");
    query.registerStoredProcedureParameter("reportOutputData", String.class, ParameterMode.OUT);


    query.execute();


    return String.valueOf(query.getOutputParameterValue("reportOutputData"));

query.getOutputParameterValue("reportOutputData")的长度为4000。应该更长一些(例如40,000 +)。

application.properties:

spring.jpa.properties.hibernate.dialect=com.company.package.config.CustomSQLServerDialect

CustomSQLServerDialect:

    public class CustomSQLServerDialect extends SQLServer2012Dialect {

    public CustomSQLServerDialect() {
        super();
        registerColumnType(Types.VARCHAR, "nvarchar(max)");
        registerColumnType(Types.CLOB, "nvarchar(max)");
        registerColumnType(Types.NVARCHAR, "nvarchar(max)");
        registerColumnType(Types.NCLOB, "nvarchar(max)");
        registerHibernateType(Types.NVARCHAR, 
        StandardBasicTypes.STRING.getName());
}

}

0 个答案:

没有答案