[英]Spring JPA @Query JPQL fails with "Unexpected token: DATE"
我正在使用 Spring Data JPA,我想查詢我的結果並過濾它們。 在 SQL 中,我會像這樣編寫我的查詢(針對 DB2 數據庫):
SELECT * FROM CAR
WHERE ACCIDENT_YEAR IS NULL
OR BUY_YEAR >= CURRENT_DATE
ORDER BY CAR_NUMBER
使用 Spring JPA,我嘗試使用 @Query 注釋和 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 > Install 時,出現以下錯誤:
NoViableAltException:意外標記:DATE
, 和
org.hibernate.hql.internal.ast.QuerySyntaxException:意外標記:日期附近第 1 行,第 84 列 [SELECT c FROM CAR c WHERE c.EXPIRY_DATE 為 NULL 或 c.EXPIRY_DATE >= CURRENT DATE]
我如何寫上面的查詢?
如果要使用@Query
注釋定義查詢,可以使用 JPQL-query(查詢定義默認使用它)或本機 SQL(使用nativeQuery = true
)。 SQL 使用關系數據庫表、記錄和字段,而 JPQL 使用 Java 類和對象。
在您的情況下,您混合了兩種選擇。 你可以這樣做:
JPQL:
public interface CarRepository extends JpaRepository<CarEntity, Integer> {
@Query("SELECT c FROM CarEntity c WHERE c.expiryDate IS NULL OR c.expiryDate >= CURRENT_DATE")
List<CarEntity> findAllNonExpiredCars(Sort sort);
}
本機 SQL:
public interface CarRepository extends JpaRepository<CarEntity, Integer> {
@Query("SELECT * FROM schema_name.CAR WHERE EXPIRY_DATE IS NULL OR EXPIRY_DATE >= CURRENT_DATE ORDER BY some_field_name",
nativeQuery = true)
List<CarEntity> findAllNonExpiredCars();
}
看看這些鏈接:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.