Spring数据查询不正常,因为字段中有Or
字段为String approvedOrRejectedBy
。因此,在编写查询时,它会与默认的Or混淆。
List<Object> findAllByTimeStampBetweenAndCameraSlugInAndApprovedOrRejectedBy(long startTime, long endTime, List<String> cameraSlugs, String id);
由于字段名中存在Or
,因此抛出错误。对于如何解决这个问题,除了更新文件名和DB映射之外,还有什么建议或解决方法吗?
通过method-name进行的查询将从名称中解释某些关键字:
- 主题关键词like here
findAllBy
- 谓词关键字,如这里的
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