我正在使用 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]
我如何寫上面的查詢?
uj5u.com熱心網友回復:
如果要使用@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();
}
看看這些鏈接:
Spring Data JPA - 參考檔案。查詢方法
Spring Data JPA @Query。貝爾東
JPA 查詢的型別。貝爾東
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/317092.html
上一篇:org.springframework.core.convert.ConverterNotFoundException:找不到能夠從[java.lang.String]型別轉換為Model型別的轉換器
