有没有办法,我可以得到不同的User
对象列表(基于用户名)。并且仍然将结果作为User
对象列表而不是用户名列表。
我的代码是
def criteria = User.createCriteria()
def users = criteria.list() {
projections {
distinct("username")
}
setResultTransformer(CriteriaSpecification.ROOT_ENTITY)
}
return users
目前我正在获取用户名列表,而不是用户。
答案 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}%");
});