10

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

我的代码是

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

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

4

6 回答 6

16

雅投影就像按用户名过滤和选择,您应该将其更改为

def criteria = User.createCriteria()
def users = criteria.listDistinct() {
    projections {
        groupProperty("username")
    }
}
return users

任务完成!

于 2013-10-07T08:26:10.853 回答
4

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

  • User.list().unique()
  • User.list().unique()重写域类上的equals()方法以使用Userusername
  • User.list().unique { it.username }toArray()(之后可能需要list()
于 2013-07-12T10:23:29.467 回答
1

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

例子:


def users = []
for (def room in rooms) {
    users.addAll(room.users)
}
return users.unique{ it.id }
于 2014-07-19T16:44:57.580 回答
1
def criteria = User.createCriteria()
def users = criteria.list() {
    projections {
        distinct("username")
    }
    setResultTransformer(CriteriaSpecification.ROOT_ENTITY)
}

只需将 setResultTransformer(CriteriaSpecification.ROOT_ENTITY) 替换为 resultTransformer(ALIAS_TO_ENTITY_MAP)。结果你会得到一个字符串列表

否则只需将 .list 替换为 .listDistinct 并使用不需要 distinct("username"),只需 property("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}%");
    });
于 2017-08-19T06:50:36.160 回答
0

使用 where 查询(分离条件):

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

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

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

于 2013-07-12T10:39:47.413 回答
0

这将为您提供基于 userName 的不同用户对象

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

于 2017-03-09T15:08:22.003 回答