由于绑定错误,在 spring-data-jpa 中的本机查询参数中使用 joda DateTime 失败

Jos*_*osh 5 java jpa jodatime spring-data spring-data-jpa

这里有两个查询应该完全相同,除了一个被标记为本机而另一个不是。第一个工作正常,但第二个失败incompatible data type in conversion

  @Transactional(readOnly = true)
  @Query(value = "select startDate from TaskMetrics where startDate between :startDate and :endDate")
  List<DateTime> findStartDateByStartDateBetween(@Param("startDate") DateTime startDate,
  @Param("endDate") DateTime endDate);
Run Code Online (Sandbox Code Playgroud)

这会生成查询:

select taskmetric0_.startDate as col_0_0_ from TaskMetrics taskmetric0_ where taskmetric0_.startDate between ? and ?
Run Code Online (Sandbox Code Playgroud)

带绑定

binding parameter [1] as [TIMESTAMP] - [2015-02-02 10:57:14.279]
binding parameter [2] as [TIMESTAMP] - [2015-02-04 10:57:14.281]
Run Code Online (Sandbox Code Playgroud)

-

  @Transactional(readOnly = true)
  @Query(nativeQuery = true, value = "select startDate from TaskMetrics where startDate between :startDate and :endDate")
  List<DateTime> findStartDateBetween(@Param("startDate") DateTime startDate,
  @Param("endDate") DateTime endDate);
Run Code Online (Sandbox Code Playgroud)

这会生成查询:

select startDate from TaskMetrics where startDate between ? and ?
Run Code Online (Sandbox Code Playgroud)

使用一个绑定,这似乎也有点奇怪(尤其是为什么#2?):

binding parameter [2] as [VARBINARY] - [2015-02-04T10:57:14.315-05:00]
Run Code Online (Sandbox Code Playgroud)

我使用 Hibernate 4.3.8.Final 作为我的 JPA 2.1 提供程序,并使用 Jadira Usertype 3.1.0.CR10 来支持 JodaTime。

我做错了什么还是这是某个地方的错误?

此处打开的错误 - https://jira.spring.io/browse/DATAJPA-671

Jen*_*ens 0

据我所知,第二个是nativeQuery不能与 joda DateTime 一起使用的。Java.sql.Date代替使用。

  • 这有什么意义呢?这是失败的类型绑定。无论查询是否是本机的,这都应该适当地发生。我正在使用 Jadira 用户类型为 Joda 创建和注册转换器。如果我不是第一个查询也会失败。也许问题出在贾迪拉身上。 (2认同)