gpt4 book ai didi

java - EJBQL - 查找具有超过 'x' 关系的所有行

转载 作者:行者123 更新时间:2023-12-01 15:22:50 25 4
gpt4 key购买 nike

我知道一定有一种简单的方法可以做到这一点,但目前我还没有想到。我有一个简单的实体,例如(为简洁起见,删除了不相关的部分):

@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

...但是这个语法当然不起作用(hibernate 提示语法)。我已经尝试过:

SELECT r FROM Review r WHERE r.approved = 0 HAVING COUNT(r.flags) > 1

...该程序运行,但也返回具有 0 或 1 标志的评论。我需要使用什么魔法调用来仅查找具有 2 个或更多标志的那些?

最佳答案

由于注释,我假设您在可以使用 JPQL 而不是 EJB QL 的环境中操作。如果是这样,那么SIZE运算符(operator)就是为了这种目的而存在的。它将集合的路径作为参数并返回元素的数量。

在您的情况下,JPQL 查询是:

SELECT r FROM Review r WHERE r.approved = 0 AND SIZE(r.flags) > 1

关于java - EJBQL - 查找具有超过 'x' 关系的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10629937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com