Spring数据查询不正常,因为字段名称中有Or.字段名是- approvedOrRejectedBy



Spring数据查询不正常,因为字段中有Or

字段为String approvedOrRejectedBy。因此,在编写查询时,它会与默认的Or混淆。

我写的查询是:
List<Object> findAllByTimeStampBetweenAndCameraSlugInAndApprovedOrRejectedBy(long startTime, long endTime, List<String> cameraSlugs, String id);

由于字段名中存在Or,因此抛出错误。对于如何解决这个问题,除了更新文件名和DB映射之外,还有什么建议或解决方法吗?

通过method-name进行的查询将从名称中解释某些关键字:

  • 主题关键词like herefindAllBy
  • 谓词关键字,如这里的And,Or,Between以及属性名称

由于您的字段/属性似乎被命名为approvedOrRejectedBy,您可以通过以不同的方式命名对象属性并使用给定的映射db列名注释它,例如@Column(name "ApprovedOrRejectedBy")

@Column(name "approvedOrRejectedBy")
String reviewedBy;

那么你的查询方法可以重写为

List<Object> findAllByTimeStampBetweenAndCameraSlugInAndReviewedBy(long startTime, long endTime, List<String> cameraSlugs, String id);

或者,由于方法名变得难以阅读,您可以缩短名称并像这样指定@Query注释上的SELECT:

@Query("SELECT * FROM entityOrTable x WHERE x.timeStamp BETWEEN ?1 AND ?2 AND x.cameraSlug IN ?3 AND x.approvedOrRejectedBy = ?4")
List<Object> findByIntervalCameraSlugInAndReviewedBy(long startTime, long endTime, List<String> cameraSlugs, String id);

参见:

  • Spring-Data-Jpa Repository -下划线在实体列名
  • Spring Data JPA存储库方法不识别带有下划线的属性名

尝试使用JPQL编写自定义查询,如@Query注释。请参见

https://www.baeldung.com/spring-data-jpa-query

最新更新