java Spring JPA@Query JPQL因“意外标记:日期”而失败
我正在使用SpringDataJPA,我想查询我的结果并过滤它们。在SQL中,我会这样编写查询(针对DB2数据库):
SELECT * FROM CAR
WHERE ACCIDENT_YEAR IS NULL
OR BUY_YEAR >= CURRENT_DATE
ORDER BY CAR_NUMBER
对于Spring JPA,我正尝试使用@Query annotation和JPQL这样做:
@Repository
public interface CarRepository extends JpaRepository<CarEntity, Integer> {
@Query("SELECT c FROM CAR c WHERE c.EXPIRY_DATE IS NULL OR c.EXPIRY_DATE >= CURRENT DATE")
List<CarEntity> findAllNonExpiredCars(Sort sort);
}
,然后我可以像这样调用此方法:
carRepository.findAllNonExpiredCars(Sort.by("CAR_NUMBER"));
但是,当我做Maven>;安装后,我发现以下错误:
NoViableAltException:意外标记:日期
,及
org。冬眠hql。内部的阿斯特。QuerySyntaxException:意外标记:第1行第84列附近的日期[从c车中选择c,其中c.expiration\u DATE为空或c.expiration\u DATE>;=当前日期]
我如何写上面的查询
# 1 楼答案
如果要使用
@Query
注释定义查询,可以使用JPQL查询(查询定义默认使用它)或本机SQL(使用nativeQuery = true
)。SQL使用关系数据库表、记录和字段,而JPQL使用Java类和对象在你的情况下,你混合了两种选择。您可以这样做:
JPQL:
本机SQL:
请看以下链接:
Spring Data JPA - Reference Documentation. Query Methods
Spring Data JPA @Query. Baeldung
Types of JPA Queries. Baeldung