我正在使用 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
, and
org.hibernate.hql.internal.ast.QuerySyntaxException:意外标记:第 1 行第 84 列附近的 DATE [SELECT c FROM CAR c WHERE c.EXPIRY_DATE IS NULL OR c.EXPIRY_DATE >= CURRENT DATE]
我如何编写上面的查询?
如果您想使用定义查询@Query
注解,您可以使用 JPQL 查询(查询定义默认使用它)或本机 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 - 参考文档。查询方式 https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods
Spring Data JPA @Query。拜尔东 https://www.baeldung.com/spring-data-jpa-query
JPA 查询的类型。拜尔东 https://www.baeldung.com/jpa-queries
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)