HQL查询,根据多个需求检查列表的每一项



我想根据实体上列表的内容过滤查询。我不只是想检查是否有东西在这个列表中,我想在函数式编程中有一个'谓词',这是具有挑战性的研究,因为'谓词'是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

我已经看过使用表达式操作符ANY(子查询),但我不知道它是如何得到所有的方式。我需要将整个表达式作为对照列表中的每个项的检查。

HQL有这样的东西吗,它叫什么?

尝试使用以下查询:

select distinct p from PainTracker p
join fetch p.timePeriods tp
where tp.startTime < :currentTime and tp.endTime > :currentTime

请参阅hibernate文档的这一部分。

最新更新