【发布时间】:2021-10-29 22:13:04
【问题描述】:
我想根据实体上的列表内容过滤查询。我不只是想检查此列表中是否有某些东西,我想像函数式编程一样有一个“谓词”,因为“谓词”在 hql 中是其他东西,所以研究起来很有挑战性。
基本上是这样
list.filter(x -> x > 100 and x < 150)
这是我在我的 hql 中想要的。
// This query is pseudocode of what I want to achieve
// keywords ANY_OF, CONFORMS_TO are made up syntax in the code below
public List<PainTracker> getTrackersInCurrentlyActive() {
String query = "FROM PainTracker AS tracker WHERE ANY_OF tracker.timePeriods AS tp CONFORMS_TO tp.startTime < :currentTime AND tp.endTime > :currentTime)";
TypedQuery<ParkedParking> q = entityManager.createQuery(query, ParkedParking.class);
q.setParameter("currentTime", new Date());
return q.getResultList();
}
//PainTracker has this field
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = "pain_time_periods",
joinColumns = @JoinColumn(name = "pain_tracker"),
inverseJoinColumns = @JoinColumn(name = "time_periods"))
private List<TimePeriod> timePeriods;
@Entity
@Table(name = "time_period")
public class TimePeriod {
// This table have startTime and endTime
我看过使用expression operator ANY (subquery),但我不知道它是如何到达那里的。我需要用我的整个表达式来检查列表中的每个项目。
HQL 有这方面的东西吗,叫什么?
【问题讨论】: