【问题标题】:Is there a way to use properties with "And" in a spring data JPA query?有没有办法在 Spring Data JPA 查询中使用带有“And”的属性?
【发布时间】:2021-12-08 00:28:13
【问题描述】:

在我们的项目中,我们有一个实体类Employee,看起来像这样:

@Entity
class Employee {
  ...
  long travelDistanceAndTimeId;
  ...
}

我们现在想使用 Spring Data JPA 来查找具有特定travelDistanceAndTimeId 的所有员工,因此我们的 EmployeeRepository 如下所示:

interface EmployeeRepository extends Repository<Employee, Long> {

  List<Employee> findByTravelDistanceAndTimeId(long travelDistanceAndTimeId);
}

但是,这失败了,因为 Spring Data JPA 认为此方法应查找具有给定 travelDistance 和给定 timeId 的员工,因为根据 Spring Data JPA documentationand 被视为方法谓词关键字在这里。

有没有办法让 Spring Data JPA 将 travelDistanceAndTimeId 视为一个字段,并为此查询禁用“AND”方法关键字?

【问题讨论】:

  • 你的字段travelDistanceAndTimeId 是什么?如何将“travelDistance”和“TimeId”保存在一个 Long 字段中?我希望有 2 个字段,travelDistancetimeId
  • @Willem 与问题无关。
  • 可以考虑原生查询baeldung.com/spring-data-jpa-query
  • @Column(name="TravelDistanceAndTimeId") 注释字段,并命名不带 and long TravelDistanceTimeId; 的 java 字段,然后将方法命名为 findByTravelDistanceTimeId 参见 stackoverflow.com/questions/41296713/…
  • @Willem,您可以将其视为对 TraveDistanceAndTime 实体的引用,但我的问题并非针对此示例。

标签: java spring-boot spring-data-jpa spring-data


【解决方案1】:

就像大力水手所说,考虑使用原生查询如下:

@Query(value = "SELECT <columns> FROM <TableName> WHERE travelDistanceAndTimeId=?1", nativeQuery = true)
public <returnType> findByTravelDistanceAndTimeId(long travelDistanceAndTimeId);

【讨论】:

  • 您好,使用原生有什么限制吗?我想一个 jpql 查询也可以工作,例如"SELECT e FROM Employee e WHERE e.travelDistanceAndTimeId=?1"
猜你喜欢
  • 1970-01-01
  • 2016-07-01
  • 2019-04-15
  • 1970-01-01
  • 1970-01-01
  • 2015-03-18
  • 1970-01-01
  • 2018-07-25
  • 2020-02-18
相关资源
最近更新 更多