1

以下に示すように、User と Item の 2 つのドメイン クラスがあります。

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)
}

このデータを表示するための(パフォーマンスの観点から)最良の方法は何ですか?

4

2 に答える 2

0

次の実装を使用して、行の重複を防ぐことができます。

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

この場合、最善の方法は join を使用することです

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

はい、重複する行がありますが、一意の方法を使用して簡単に削除できますusers.unique()

于 2013-07-17T06:35:04.050 に答える