Spring Data JPA @Query将字符串传递给存储过程

时间:2018-04-12 05:00:42

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

我正在使用Spring Data JPA并且遇到了一些我无法解决的奇怪行为。

 @Query(value="EXEC dbo.spChartPracticeInternalDoctor ?, ?, ?, ?", nativeQuery = true)
List<ReportDataSet> spChartPracticeInternalDoctor(Long id, String date,Long months, String tests);

当我在不包含空格的测试中传入CSV字符串时,存储过程正确执行(即SC,ECG)

但是当我传入带有空格的测试字符串时,它会出错。

e.g。 SC,ECG,IP Standard Consult

2018-04-12 12:45:13.309 DEBUG 684 --- [  XNIO-2 task-2] com.pci.dprm.aop.logging.LoggingAspect   : Enter: com.pci.dprm.web.rest.ReportDataSetResource.spChartPracticeInternalDoctor() with argument[s] = [36, 2018-04-12T12:05:01 08:00, 24, SC,ECG,IP Standard Consult]
Hibernate: EXEC dbo.spChartPracticeInternalDoctor ?, ?, ?, ?
2018-04-12 12:45:13.316  WARN 684 --- [  XNIO-2 task-2] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 8114, SQLState: S0001
2018-04-12 12:45:13.317 ERROR 684 --- [  XNIO-2 task-2] o.h.engine.jdbc.spi.SqlExceptionHelper   : Error converting data type nvarchar to date.

似乎hibernate在将字符串传递给SQL时没有正确转义字符串,但我无法弄清楚如何覆盖转义。

我很感激处理这个问题的任何想法

1 个答案:

答案 0 :(得分:0)

我认为错误不是因为第4个参数因为第2个参数。日志显示 - &gt;将数据类型nvarchar转换为日期时出错。

我认为您需要将第二个参数转换为Date。 请参阅以下代码段以供参考。

@Query(value="EXEC dbo.spChartPracticeInternalDoctor ?, ?, ?, ?", nativeQuery = true)
List<ReportDataSet> spChartPracticeInternalDoctor(Long id, Date date,Long months, String tests);