Graal - Comment obtenir la liste des différents Objets Utilisateur
Est-il un moyen que je peux obtenir la liste des différents User
objets(basé sur le nom d'utilisateur). Et toujours obtenir le résultat que d'une Liste de User
Objets plutôt que la, Liste de nom d'utilisateur.
Mon code est
def criteria = User.createCriteria()
def users = criteria.list() {
projections {
distinct("username")
}
setResultTransformer(CriteriaSpecification.ROOT_ENTITY)
}
return users
Suis actuellement obtenir la Liste des noms d'utilisateur, pas l'Utilisateur.
De l'utilisateur.findAll ne fonctionne pas?
1.) J'ai besoin de pour obtenir d'Utilisateur distinct des objets(basé sur le nom d'utilisateur). 2.) J'ai utiliser des critères, ma liste est basée sur une recherche complexe. Donc findAll() l'habitude de s'intégrer.
Comme par Graal Le document "les listDistinct() la méthode ne fonctionne pas bien avec les options de la pagination maxResult et firstResult." L'utilisateur ici, devrait être distinct fondé sur le nom d'utilisateur qui n'est pas basée sur la méthode equals ou id.
Cette question n'a pas de sens à partir d'une base de données de point de vue. Une fois que vous faites un appel précis vous serait tout simplement être arbitrairement attrape le premier résultat qui correspond au nom d'utilisateur et de conservation de retour. Vous auriez probablement besoin d'utiliser les requêtes HQL pour ce faire, mais je ne suis toujours pas certain pourquoi vous désirez. Il me semble qu'il y est un défaut de conception dans la table User pour commencer si les noms d'utilisateur peuvent être dupliqués.
1.) J'ai besoin de pour obtenir d'Utilisateur distinct des objets(basé sur le nom d'utilisateur). 2.) J'ai utiliser des critères, ma liste est basée sur une recherche complexe. Donc findAll() l'habitude de s'intégrer.
criteria.listDistinct()
?Comme par Graal Le document "les listDistinct() la méthode ne fonctionne pas bien avec les options de la pagination maxResult et firstResult." L'utilisateur ici, devrait être distinct fondé sur le nom d'utilisateur qui n'est pas basée sur la méthode equals ou id.
Cette question n'a pas de sens à partir d'une base de données de point de vue. Une fois que vous faites un appel précis vous serait tout simplement être arbitrairement attrape le premier résultat qui correspond au nom d'utilisateur et de conservation de retour. Vous auriez probablement besoin d'utiliser les requêtes HQL pour ce faire, mais je ne suis toujours pas certain pourquoi vous désirez. Il me semble qu'il y est un défaut de conception dans la table User pour commencer si les noms d'utilisateur peuvent être dupliqués.
OriginalL'auteur ashipj | 2013-07-12
Vous devez vous connecter pour publier un commentaire.
Ya projection est comme le filtrage et la sélection par nom d'utilisateur, vous devez la modifier pour
TRAVAIL!
OriginalL'auteur danielad
L'un de ces travail - je n'ai pas testé l'un d'eux, je vous laisse 🙂
User.list().unique()
User.list().unique()
avec leequals()
méthode sur laUser
domaine classe substituée à comparer des objets à l'aide de lausername
User.list().unique { it.username }
(peut-être besointoArray()
aprèslist()
)Pouvez-vous utiliser le
users
liste de noms d'utilisateurs (comme vous l'avez dans votre question) et obtenir des objets pour ceux qui...def userObjects = users.collect { User.findByUsername(it) }
?Qui aurait pour résultat de deux db appels. Pas bon si la performance est une grande priorité. 🙂
Sont les noms d'utilisateur répété souvent,? Si la liste distincte est légèrement plus petit que le nombre d'entrées de la table en mémoire de filtrage ne doit pas être mauvais...
Les noms d'utilisateurs sont souvent répété, généralement de plus de 70% des résultats de la recherche des doublons.
OriginalL'auteur zoran119
Cette, vous aurez l'utilisateur distinctes objet basé sur le nom d'utilisateur
def userInstance = Utilisateur.liste().unique{ il.user_name}
C'est aussi un exemple de mémoire de filtrage, comme mentionné par ashipj
OriginalL'auteur vedavyasa
Où jamais vous avez obtenu une collection (liste, tableau, ...) (je ne sais pas si travailler avec n'importe quel type de collection, mais le travail dans tout ce que j'ai pu tester). Utilisation
unique{ it.property }
:Exemple:
OriginalL'auteur IgniteCoders
Où requête(Détaché critères):
il devrait en résulter une requête distincte des résultats.
OriginalL'auteur Saurabh Dixit
Il suffit de remplacer setResultTransformer(CriteriaSpecification.ROOT_ENTITY) avec resultTransformer(ALIAS_TO_ENTITY_MAP). Vous obtiendrez une liste de chaîne de caractères comme un résultat
sinon, il suffit de les remplacer .liste avec .listDistinct et l'utilisation n'ont pas besoin distinctes("username"), juste peut être bien("username");
Habituellement, les gens obtenir des problèmes avec la pagination. pas de résultats. Si vous avez déjà eu quelque chose comme:
Il pourrait en résulter en ligne des doublons. Parce que .listDistinct() ne prend pas en charge la pagination, il suffit d'ajouter
Donc, la requête devrait ressembler à ceci:
OriginalL'auteur Andrey Doloka