Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql JPQL不能正常工作_Mysql_Spring_Hibernate_Spring Data_Jpql - Fatal编程技术网

Mysql JPQL不能正常工作

Mysql JPQL不能正常工作,mysql,spring,hibernate,spring-data,jpql,Mysql,Spring,Hibernate,Spring Data,Jpql,父类: @Table(name = "users") class User { @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.EAGER) List<Gender> genders = new ArrayList<>(); 我在MySQL中的目标是: 选择*从用户a左加入a.id=b.id上的性别b,其中 b、 性别 返回1行 它工作得很好。我只有一张唱片符合这个条件

父类:

@Table(name = "users")
class User {
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
List<Gender> genders = new ArrayList<>();
我在MySQL中的目标是:

选择*从用户a左加入a.id=b.id上的性别b,其中 b、 性别

返回1行 它工作得很好。我只有一张唱片符合这个条件

但JPQL中的代码相同:

从用户a中选择a左加入a.genders b其中b.sex='dasd'

返回: 一个用户–正确,表SEXT中的所有genders,但我不希望仅当sex='dasd'时,我想要的全部,并且只有一条记录满足此条件。顺便说一句,JPQL为每个子查询生成和忽略条件sex='dasd'


如何编写满足条件的子查询?我可以强制子查询只返回与JPQL查询匹配的性别吗

在JPQL中,从实体而不是表中选择

SELECT a FROM User a LEFT JOIN a.genders b WHERE b.sex ='dasd'
由于您将a.genders列表配置为“急切”,因此每次选择用户时,它都会获取与该用户相关的所有性别。即使它们与JPQL查询不匹配

如果将a.genders列表设置为LAZY,它将不会获取任何性别,因为您仅从用户中选择

该查询相当于SQL

SELECT a.* FROM users a LEFT JOIN genders b ON a.id=b.id WHERE b.sex='dasd'
如果只想选择一种性别

SELECT b FROM Gender b WHERE b.user = :user AND b.sex = 'dasd'

在JPQL中,从实体而不是表中选择

SELECT a FROM User a LEFT JOIN a.genders b WHERE b.sex ='dasd'
由于您将a.genders列表配置为“急切”,因此每次选择用户时,它都会获取与该用户相关的所有性别。即使它们与JPQL查询不匹配

如果将a.genders列表设置为LAZY,它将不会获取任何性别,因为您仅从用户中选择

该查询相当于SQL

SELECT a.* FROM users a LEFT JOIN genders b ON a.id=b.id WHERE b.sex='dasd'
如果只想选择一种性别

SELECT b FROM Gender b WHERE b.user = :user AND b.sex = 'dasd'

你能提供性别实体代码吗?我还包括性别。java(儿童)你能提供性别实体代码吗?我还包括性别。java(儿童)每次你选择一个用户时,它都会获取与该用户相关的所有性别。即使它们与JPQL查询不匹配。是的,这就是问题所在。我可以强制它只返回与JPQL查询匹配的性别吗?问题是,您选择的不是性别,而是用户。如果使用EAGER,genders集合将使用完整集合进行初始化。如果使用LAZY,genders集合将使用代理进行初始化,该代理将在需要时获取整个集合(如果使用
a.getGenders()
)。我已经编辑了关于如何选择一种性别的答案。没有标准。问题是您正在查询用户。如果只想选择一种性别,请使用“从性别中选择”查询。我想查询用户和性别。不是个别的。在原始SQL中,它可以工作。我会尝试使用mybatis。每次你选择一个用户时,它都会获取与该用户相关的所有性别。即使它们与JPQL查询不匹配。是的,这就是问题所在。我可以强制它只返回与JPQL查询匹配的性别吗?问题是,您选择的不是性别,而是用户。如果使用EAGER,genders集合将使用完整集合进行初始化。如果使用LAZY,genders集合将使用代理进行初始化,该代理将在需要时获取整个集合(如果使用
a.getGenders()
)。我已经编辑了关于如何选择一种性别的答案。没有标准。问题是您正在查询用户。如果只想选择一种性别,请使用“从性别中选择”查询。我想查询用户和性别。不是个别的。在原始SQL中,它可以工作。我将试着用mybatis做这件事。