Grails - 如何使用Criteria获取一对多的关系

时间:2013-07-15 13:28:08

标签: hibernate grails gorm

我有两个域类,User和Item,如下所示

class User {
    String username;    
    static hasMany = [wishList: Item]
}

class Item {
    String heading;
    static belongsTo = [owner: User]
}

我试图在页面中同时显示两个(用户和他的wishList)详细信息。现在如果我使用“JOIN”(如下所示),我会得到重复的用户行

def users = criteria.list(offset:0, max:10) {
    fetchMode("wishList", org.hibernate.FetchMode.JOIN)
}

如果我使用“SELECT”,如下所示。有(n + 1)个sql查询发生。

def users = criteria.list(offset:0, max:10) {
    fetchMode("wishList", org.hibernate.FetchMode.SELECT)
}

显示此数据的最佳方式(在性能方面)。

2 个答案:

答案 0 :(得分:0)

对于这种情况,最好的方法是使用join

def users = criteria.list(offset:0, max:10) {
    fetchMode("wishList", org.hibernate.FetchMode.JOIN)
}

是的,会有重复的行,但可以使用独特的方法users.unique()

轻松删除

答案 1 :(得分:0)

您可以使用以下实施来防止重复行:

def users = criteria.list(offset:0, max:10) {
    fetchMode "wishList", FetchMode.JOIN
    resultTransformer Criteria.DISTINCT_ROOT_ENTITY
}