Grails - 如何获取不同用户对象的列表

时间:2013-07-12 09:01:19

标签: grails

有没有办法,我可以得到不同的User对象列表(基于用户名)。并且仍然将结果作为User对象列表而不是用户名列表。

我的代码是

def criteria = User.createCriteria()
def users = criteria.list() {
    projections {
        distinct("username")
    }
    setResultTransformer(CriteriaSpecification.ROOT_ENTITY)
}
return users

目前我正在获取用户名列表,而不是用户。

6 个答案:

答案 0 :(得分:11)

Ya投影就像过滤并通过用户名选择,您应该将其更改为

def criteria = User.createCriteria()
def users = criteria.listDistinct() {
    projections {
        groupbyproperty("username")
    }
   // setResultTransformer(CriteriaSpecification.ROOT_ENTITY)
}
return users

JOB DONE!

答案 1 :(得分:4)

其中一个应该可行 - 我没有测试过任何一个,我把它留给你:)

  • User.list().unique()
  • 使用User.list().unique()域类上的equals()方法重写
  • User,以使用username
  • 比较对象
  • User.list().unique { it.username }(可能需要toArray()后的list()

答案 2 :(得分:2)

这将为您提供基于userName的独特用户对象

def userInstance = User.list()。unique {it.user_name}

答案 3 :(得分:1)

你曾经有过一个集合(列表,数组......)(我不知道是否可以使用任何类型的集合,但可以在我可以测试的所有集合中工作)。使用unique{ it.property }

示例:


def users = []
for (def room in rooms) {
    users.addAll(room.users)
}
return users.unique{ it.id }

答案 4 :(得分:0)

使用where query(分离标准):

def userListQuery = User.where{
// Your search criteria
}

def userList = userListQuery.list().unique{ it.username }

它应该导致一个查询不同的结果。

答案 5 :(得分:0)

def criteria = User.createCriteria()
def users = criteria.list() {
    projections {
        distinct("username")
    }
    setResultTransformer(CriteriaSpecification.ROOT_ENTITY)
}

使用resultTransformer(ALIAS_TO_ENTITY_MAP)替换setResultTransformer(CriteriaSpecification.ROOT_ENTITY)。您将获得一个字符串列表作为结果

否则只需用.listDistinct替换.list并使用不需要distinct(" username"),只需要属性(" username");

通常人们会遇到分页问题。不是结果。如果你已经有类似的东西:

User.createCriteria().list([max:params.max,offset:params.offset],{
createAlias("others", "others", CriteriaSpecification.LEFT_JOIN);

ilike("others.firstName", "%${query}%");
});

可能会导致行重复。因为.listDistinct()不支持分页,所以只需添加

即可
resultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);

所以查询将如下所示:

User.createCriteria().list([max:params.max,offset:params.offset],{
    resultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
    createAlias("others", "others", CriteriaSpecification.LEFT_JOIN);

    ilike("others.firstName", "%${query}%");
    });