【发布时间】:2017-04-20 02:52:01
【问题描述】:
父类:
@Table(name = "users")
class User {
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
List<Gender> genders = new ArrayList<>();
儿童班:
@Table(name = "gender")
class Gender {
@ManyToOne(cascade = {CascadeType.ALL})
@JoinColumn(name = "userId", nullable = false)
User user;
String sex;
我在 MySQL 中的目标:
SELECT * FROM users a LEFT JOIN genders b ON a.id=b.id WHERE b.sex='dasd'
返回 1 行 它运作良好。我只有一条符合这个条件的记录。
但 JPQL 中的代码相同:
SELECT a FROM Users a LEFT JOIN a.genders b WHERE b.sex ='dasd'
返回: 一个用户 - 正确和表 Gender 中的所有性别,但我不想只有当 sex ='dasd' 并且只有一个满足此条件的记录时才想要所有。btw JPQL generateN+1 issue 并且对于每个子查询忽略条件性 ='达斯德'
如何编写满足条件的子查询?我可以强制子查询只返回与 JPQL 查询匹配的性别吗?
【问题讨论】:
-
能否提供性别实体代码?
-
我还包括了 Gender.java(child)
标签: mysql spring hibernate spring-data jpql