0

从以下域开始:

class Person {
    String login
    String name 
}

class MyDomain {
    Person creator
    static hasMany =  [userlist:Person]
}

我写了一个标准来检索我作为创建者或我在用户列表中的所有 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 
4

1 回答 1

1

我认为问题出在 OR 中,因为您声明您只能在用户列表中出现“我自己”的情况下获得结果。 此博客可能会有所帮助,其中还引用了有关 createAlias 的有用文章。

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")
}
于 2015-04-15T15:00:36.720 回答