Я знаю, что должен быть простой способ сделать это, но это не приходит ко мне на данный момент. У меня есть простой объект, как (нерелевантные части удалены для краткости):EJBQL - Найти все строки, которые имеют больше, чем 'x' отношения
@Entity
@Table(name = "reviews")
public class Review {
private String text;
private boolean approved;
private Collection<ReviewFlag> flags;
public Review() {
this.text = null;
this.approved = false;
this.flags = Collections.emptyList();
}
@Column(nullable = false)
public String getText() {
return text;
}
@Column(nullable = false)
public boolean isApproved() {
return approved;
}
@OneToMany(mappedBy="review")
public Collection<ReviewFlag> getFlags() {
return flags;
}
}
Я хочу, чтобы выполнить запрос, который находит все неутвержденный обзор с двумя или более флагами. Что-то вроде:
SELECT r FROM Review r WHERE r.approved = 0 AND COUNT(r.flags) > 1
... но, конечно, синтаксис не работает (спящий жалуется на синтаксис). Я пробовал это как:
SELECT r FROM Review r WHERE r.approved = 0 HAVING COUNT(r.flags) > 1
... это работает, но также возвращает отзывы, содержащие 0 или 1 флаги. Какой магический вызов мне нужно использовать, чтобы найти только те, у которых есть 2 или более флагов?