spring-boot - JPA 计数成员
问题描述
@Query("select count(s) from S s, TG tg where s.id = :id and tg member of s.tgs and :user member of tg.members")
@Query("select count(s) from S s, TG tg, FG fg where s.id = :id and tg member of s.tgs and :user member of fg.members and fg member of tg.members")
@Query("select count(s) from S s, TG tg, FG fg where s.id = :id and tg member of s.tgs and (:user member of tg.members or :user member of fg.members and fg member of tg.members)")
我在 JPA 中有 3 个查询。目标是计算用户是成员的 S 实体的数量。S实体与两种组TG(直接)和FG(可以是TG的成员)链接。用户可以是 TG 或 FG 的成员。
如您所见,第三个是两个第一个的相加。
这两个第一个请求似乎有效,但第三个......:
- 当我有 0 个用户时,3 个请求返回 0(预期)
- 当我在 TG 中添加用户时,第一个返回 1(预期),第二个 0(预期)和第三个 0(不预期)
- 当我在 TG 中的 FG 中添加用户时,3 个请求返回 1(没想到我必须有 2 个)
- 当用户只在FG中时,第一个请求返回0(预期),另外两个返回1(预期)
看不懂!!!为什么第三个查询没有返回第一个和第二个查询的结果???
编辑:实体(模式由 JPA 自动生成)
@Entity
public class S {
@Id
@GeneratedValue
public long id;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(joinColumns = @JoinColumn(name = "s_id"), inverseJoinColumns = @JoinColumn(name = "tg_id"))
private List<TG> tgs = new ArrayList<>();
(...)
}
@Entity
public class TG extends G {
@ManyToMany(mappedBy = "tgs", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<S> ss = new ArrayList<>();
(...)
}
@Entity
public class FG extends G {
@Column(nullable = false)
public String uniqueName;
(...)
}
@Entity(name = "groupe")
public abstract class G extends Subject {
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "membres")
private Set<Subject> membres = new HashSet<>();
(...)
}
@Entity
public class U extends Subject {
@Column(unique = true, nullable = false)
public String uniqueName;
(...)
}
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Subject {
@Id
@GeneratedValue
public long id;
(...)
}
解决方案
推荐阅读
- javascript - 如何在 Reactjs 中将数据从子组件传递到父组件?
- javascript - 按另一个数组排序数组,如 GroupBy NodeJs
- rest - 如何使用 Oanda 的 API 在一个 GET 请求中获取多个仪器蜡烛
- intellij-idea - IntelliJ IDEA 2020 对 webdriverio 选择器的支持
- python - 在时间戳熊猫之间进行选择
- python - 迭代预训练模型的 Conv2D 层
- django - 登录所需的装饰器未重定向到登录 url | 姜戈
- wordpress - 我在 wordpress 中编辑我的 css 样式表,但更改不适用于博客
- bash - 用作选项值的 Bash 进程替换
- c - 在不指定类型的情况下转换为无符号