繁体   English   中英

Grails-如何使用条件获取一对多关系

[英]Grails - How to fetch one-many relationship using Criteria

我有两个域类,分别是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)
}

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

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

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

是的,会有重复的行,但是可以使用唯一方法users.unique()轻松删除

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM