如何使用 JPA 提取此列表?

How can I extract this List with JPA?

我正在制作 Web 服务以将订单与会制作家具的工人联系起来。

我想制作业务逻辑来显示可用于此订单的客户页面。 我正要提取有关可用工人的列表。但我不知道如何提取,因为一些工人的可用时间超过一天。假设A周一、周二和周五有空,如果客户希望工人在11月9日访问,我如何提取列表?

此外,我想使用 DTO,而不是实体。

“...当它们作为字符串可用时”- 我不会这样做,而是使用星期几字段(即 1-7)或枚举。

也就是说,有很多方法可以解决这个问题,比如维护一个实际列表。假设您已完成此操作并且您的实体如下所示:

@Entity
class Worker {
  @Id
  private String id;

  @ElementCollection
  @CollectionTable(
    name="AVAILABILITY",
    joinColumns=@JoinColumn(name="WORKER_ID")
  )
  @Column(name="WEEKDAY")
  private Set<DayOfWeek> availableAt;

  ...
}

那么您可以使用这样的查询:

SELECT worker FROM Worker worker JOIN worker.availableAt av WHERE av = :selectedDayOfWeek

如果您使用的是 Hibernate(如果我没记错的话 Spring Boot 默认情况下这样做),您也可以使用 HQL 以及像这样的表达式:

SELECT worker FROM Worker worker WHERE :selectedDayOfWeek member of worker.availableAt

SELECT worker FROM Worker worker WHERE :selectedDayOfWeek in elements(worker.availableAt)

SELECT worker FROM Worker worker WHERE :selectedDayOfWeek = some  elements(worker.availableAt)

免责声明:我有一段时间没有直接使用 JPA 和 Hibernate,所以上面的代码可能存在一些错误。该方法应该仍然有效。