如何使用 JPA 提取此列表?
How can I extract this List with JPA?
我正在制作 Web 服务以将订单与会制作家具的工人联系起来。
- Worker(实体名称)可以设置为字符串(例如:SUNDAY、MONDAY、... SATURDAY)。
- Order(name of Entity) 可以在客户需要时获取 visitDate 作为 LocalDate。
我想制作业务逻辑来显示可用于此订单的客户页面。
我正要提取有关可用工人的列表。但我不知道如何提取,因为一些工人的可用时间超过一天。假设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,所以上面的代码可能存在一些错误。该方法应该仍然有效。
我正在制作 Web 服务以将订单与会制作家具的工人联系起来。
- Worker(实体名称)可以设置为字符串(例如:SUNDAY、MONDAY、... SATURDAY)。
- Order(name of Entity) 可以在客户需要时获取 visitDate 作为 LocalDate。
我想制作业务逻辑来显示可用于此订单的客户页面。 我正要提取有关可用工人的列表。但我不知道如何提取,因为一些工人的可用时间超过一天。假设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,所以上面的代码可能存在一些错误。该方法应该仍然有效。