我在JpaRepository中编写一个查询,它不接受字符串和3个LocalDateTimes作为参数。在查询中,我首先比较字符串,就像比较ID一样,然后使用相应实体的不同列,使用Hibernate 6的适当操作符创建LocalDateTimes。
应用程序正常启动,但当我调用查询时,我得到以下错误:
Argument [2023-01-23T11:43:59] of type [java.time.LocalDateTime] did not match parameter type [java.time.Duration (n/a)]
参数显然被Restcontroller正确解析了,但是Hibernate似乎没有按预期创建查询。
以下是存储库的代码和所讨论的查询:
public interface ExchangePairRepository extends JpaRepository<MyEntity, Long> {
@Query("SELECT ep.unit FROM MyEntity ep WHERE ep.id= :id AND ((ep.context = 'start' AND ((ep.unit = 'day' AND (:start+ ep.duration day) > :now) "
+ "OR (ep.unit = 'month' AND (:start+ ep.duration month) > :now))) OR (ep.context = 'end' AND ((ep.unit = 'day' AND (:now + ep.duration day) > :end) "
+ "OR (ep.unit = 'month' AND (:now + ep.duration month) > :end)) ))")
List<String> findViable(@Param("matNrOrig") String id, @Param("start") LocalDateTime start, @Param("end") LocalDateTime end,
@Param("now") LocalDateTime now);
}
以下是用于查询的实体:
@Entity
@Table(name = "my_entity")
@Data
public class MyEntity{
(...)
@Column(name = "id_orig")
private String idOrig;
´
@Column(name = "id_target")
private String idTarget;
@Column(name = "context")
private String context;
@Column(name = "duration")
private int duration;
@Column(name = "unit")
private String unit;
}
这是一个错误还是我做错了什么?任何帮助都非常感谢。
我正在使用Hibernate 6.1.6.Final和Sping Boot 3.0.1以及Java 17
1条答案
按热度按时间x4shl7ld1#
这是新参数类型推理逻辑中的一个bug。我可以用下面的查询重现:
我在此为您打开了一个问题:https://hibernate.atlassian.net/browse/HHH-16102