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



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

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

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

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

例如 SC,心电图,IP标准咨询

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.

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

我将不胜感激任何处理这个问题的想法

我认为

错误不是因为第 4 个参数,而是因为第 2 个参数。日志显示 --> 转换数据类型 nvarchar 到日期时出错。

我认为您需要将第二个参数转换为日期。请参阅下面的代码片段供您参考。

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

最新更新