1

我有两个域类,用户和项目,如下所示

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

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

我正在尝试在页面中同时显示(用户和他的愿望清单)详细信息。现在,如果我使用“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)
}

什么是显示此数据的最佳方式(就性能而言)。

4

2 回答 2

0

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

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

是的,会有重复的行,但是可以很容易地删除,使用独特的方法users.unique()

于 2013-07-17T06:35:04.050 回答
0

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

def users = criteria.list(offset:0, max:10) {
    fetchMode "wishList", FetchMode.JOIN
    resultTransformer Criteria.DISTINCT_ROOT_ENTITY
}
于 2014-11-15T06:51:45.887 回答