使用左连接搜索实体的 JPQL 查询
JPQL query with left join searching for entity
基于以下文章
JPQL, OR only returning result of one condition?
我创建了以下查询
Collection<Profile> profiles = dataManager.load(Profile.class).view("profile-view")
.query("select p from userlifecyclemgmt_Profile p " +
" left join p.legalEntities f where" +
" p.isAvailableForAll = true or :legalEntity MEMBER OF f" )
.parameter("legalEntity", serviceRequest.getHrUser().getLegalEntity())
.list();
参数:legalEntity
是classLegalEntity
的对象。此查询给我以下错误:
JpqlSyntaxException: Errors found for input jpql:[select p from userlifecyclemgmt_Profile p left join p.legalEntities f where p.isAvailableForAll = true or :legalEntity MEMBER OF f]
CommonErrorNode [<unexpected: [@35,120:125='MEMBER',<113>,1:120], resync=:legalEntity MEMBER OF f>]
使用相同的查询稍作修改:
Collection<Profile> profiles = dataManager.load(Profile.class).view("profile-view")
.query("select p from userlifecyclemgmt_Profile p " +
" left join p.legalEntities f where" +
" p.isAvailableForAll = true or :legalEntity MEMBER OF p.legalEntities" )
.parameter("legalEntity", serviceRequest.getHrUser().getLegalEntity())
.list();
没有错误,但只给出了 OR
语句第二部分的结果。我知道 JPQL 在后台创建了一个 INNER JOIN
查询,这就是原因。但是,如何让第一个查询起作用?
提前致谢!
你应该这样修改查询
select distinct p
from userlifecyclemgmt_Profile p left join p.legalEntities f
where p.isAvailableForAll=true or f=:legalEntity
from userlifecyclemgmt_Profile p left join p.legalEntities f
表达式生成 left join
本机查询,其中 returns 纯结果 profile-legalEntity
。 f
成为单个 legalEntity
的别名,不能在 member of
中使用,否则 p.legalEntities
可以。
select p
returns 相同的配置文件多次 (legalEntities.size()
)。所以你需要 distinct
.
基于以下文章 JPQL, OR only returning result of one condition? 我创建了以下查询
Collection<Profile> profiles = dataManager.load(Profile.class).view("profile-view")
.query("select p from userlifecyclemgmt_Profile p " +
" left join p.legalEntities f where" +
" p.isAvailableForAll = true or :legalEntity MEMBER OF f" )
.parameter("legalEntity", serviceRequest.getHrUser().getLegalEntity())
.list();
参数:legalEntity
是classLegalEntity
的对象。此查询给我以下错误:
JpqlSyntaxException: Errors found for input jpql:[select p from userlifecyclemgmt_Profile p left join p.legalEntities f where p.isAvailableForAll = true or :legalEntity MEMBER OF f]
CommonErrorNode [<unexpected: [@35,120:125='MEMBER',<113>,1:120], resync=:legalEntity MEMBER OF f>]
使用相同的查询稍作修改:
Collection<Profile> profiles = dataManager.load(Profile.class).view("profile-view")
.query("select p from userlifecyclemgmt_Profile p " +
" left join p.legalEntities f where" +
" p.isAvailableForAll = true or :legalEntity MEMBER OF p.legalEntities" )
.parameter("legalEntity", serviceRequest.getHrUser().getLegalEntity())
.list();
没有错误,但只给出了 OR
语句第二部分的结果。我知道 JPQL 在后台创建了一个 INNER JOIN
查询,这就是原因。但是,如何让第一个查询起作用?
提前致谢!
你应该这样修改查询
select distinct p
from userlifecyclemgmt_Profile p left join p.legalEntities f
where p.isAvailableForAll=true or f=:legalEntity
from userlifecyclemgmt_Profile p left join p.legalEntities f
表达式生成 left join
本机查询,其中 returns 纯结果 profile-legalEntity
。 f
成为单个 legalEntity
的别名,不能在 member of
中使用,否则 p.legalEntities
可以。
select p
returns 相同的配置文件多次 (legalEntities.size()
)。所以你需要 distinct
.