我知道必须有一种简单的方法来做到这一点,但目前还没有想到。我有一个简单的实体,例如(为简洁起见,删除了不相关的部分):
@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 个或更多标志的那些?