0

我想获取在其列表(firstsList 或 SecondsList)中包含特定用户的实例。
在我的解决方案中,创建标准仅考虑第一个用户列表。这似乎是对逻辑 OR 的错误使用

领域

class ClassA {
    static hasMany =  [firstsList:User,SecondsList:User]
}

服务

def idList =  ClassA.createCriteria().list () {

projections { distinct ( "id" )
    property("name")
    property("id")
}

or {                 
   firstsList{eq("login", 'John')}             
   SecondsList{eq("login", 'John')}                                 
 }

order("name","desc")

}

return idList
4

1 回答 1

1

这背后的原因是休眠默认使用inner join. 但在你的情况下,你需要left join. 为此,您可以使用createAlias.createCriteria

    def idList = ClassA.createCriteria().list() {
        projections { 
            distinct("id")
            property("name")               
        }

        createAlias("firstsList", "fl", JoinType.LEFT_OUTER_JOIN)
        createAlias("SecondsList", "sl", JoinType.LEFT_OUTER_JOIN)
        or {                 
            eq("fl.login", "John")             
            eq("sl.login", "John")                                
        }

        order("name", "desc")
    }
于 2015-10-01T10:07:42.947 回答