これを行う簡単な方法があるはずですが、現時点では私にはわかりません。私は次のような単純なエンティティを持っています(簡潔にするために無関係な部分を削除しました):
@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;
}
}
2つ以上のフラグを持つすべての未承認のレビューを見つけるクエリを実行したいと思います。何かのようなもの:
SELECT r FROM Review r WHERE r.approved = 0 AND COUNT(r.flags) > 1
...しかしもちろん、その構文は機能しません(hibernateは構文について不平を言います)。私はそれを次のように試しました:
SELECT r FROM Review r WHERE r.approved = 0 HAVING COUNT(r.flags) > 1
...実行しますが、フラグが0または1のレビューも返します。2つ以上のフラグを持つものだけを見つけるために使用する必要がある魔法の呼び出しは何ですか?