从以下域开始:
class Person {
String login
String name
}
class MyDomain {
Person creator
static hasMany = [userlist:Person]
}
我写了一个critera来检索我作为创建者的所有MyDomainIntances或我在用户列表中的位置:
def login = "myself"
def result = MyDomain.createCriteria().list () {
projections { distinct ( "id" )
property("name")
property("id")
}
or {
userlist{eq("login", login)}
creator {eq("login",login)}
}
order("name","desc")
}
问题在于这个代码我只得到了我在用户列表中的实例。
虽然creator {eq("login",login)}
效果很好:如果我自己只使用它,我会得到一个列表,其中我是创作者
生成的查询:
Hibernate:
select distinct this_.id as y0_,this_.name as y1_,this_.id as y2_
from mydomain this_ inner join person creator_al2_ on this_.creator_id=creator_al2_.id
inner join mydomain_person userlist5_ on this_.id=userlist5_.mydomain_userlist_id
inner join person userlist1_ on userlist5_.person_id=userlist1_.id
where ((userlist1_.login=?) or (creator_al2_.login=?))
order by this_.name desc
答案 0 :(得分:1)
我认为问题出现在OR中,因为您声明您只能获得“我自己”的结果。在用户列表中。 This blog可能会有所帮助,也会在createAlias上引用this helpful article。
def result = MyDomain.createCriteria().list () {
createAlias('creator', 'c')
projections { distinct ( "id" )
property("name")
property("id")
}
or {
userlist{
eq("login", login)
}
eq("c.login", login)
}
order("name","desc")
}