【问题标题】:Spring Data JPA @Query passing string to stored procedureSpring Data JPA @Query 将字符串传递给存储过程
【发布时间】:2018-09-22 02:54:10
【问题描述】:

我正在使用 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,ECG,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.

似乎hibernate在将字符串传递给SQL时没有正确转义字符串,但我不知道如何覆盖转义。

如果有任何想法来解决这个问题,我将不胜感激

【问题讨论】:

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


    【解决方案1】:

    我认为错误不是因为第四个参数而是因为第二个参数。日志显示 --> 将数据类型 nvarchar 转换为日期时出错。

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

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

    【讨论】:

    • 这对我来说仍然是个谜,为什么只有在使用带有空格的参数时才会发生这种情况。但是将其更改为 LocalDate 解决了这个问题。谢谢
    猜你喜欢
    • 2017-03-21
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多