comment voulez-vous obtenir de “vrais” sql distinctes avec hibernate critères de requêtes?
J'ai une Hibernate critères de requête qui est mal à sortir les résultats maximum. Dans de nombreux cas, alors que j'ai spécifié 20 max de résultats, la requête en réalité qu'retourne 1 ou 5 des résultats, parce que les restrictions de retour de nombreux doublons.
Criteria c = session.createCriteria(DomainObject.class);
c.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
c.createAlias("tags.list", "tag");
c.createAlias("names", "name");
c.createAlias("site", "site");
c.createAlias("site.tags.list", "siteTag");
//loads of or/and eq/like restrictions.
c.setFirstResult(0);
c.setMaxResults(20);
return c.list();
Est-il possible de résoudre ce problème de requête, de sorte que si je dis 20 max de résultats, il n'a vraiment de retour 20 quartier des résultats? Il semble assez fou que hibernate limites de la requête à 20 résultats, et ne l'distinctes de filtrage APRÈS plutôt qu'au niveau base de données.
Aider?
OriginalL'auteur egervari | 2010-06-30
Vous devez vous connecter pour publier un commentaire.
Je pense que vous êtes proche, vous avez juste besoin d'une liste de différents Id de la place si des objets distincts.
Essayez d'ajouter cette page à vos critères:
ci-dessus est une citation de la réponse à Trois cents mille quatre cent quatre vingt onze
OriginalL'auteur VoodooChild
J'ai obtenu cette réponse d'un autre forum
Il semble être la meilleure solution. En gros, vous créez une sous-requête en premier (DetachedCriteria). Cela permettra de récupérer toutes les distincts id.
Ensuite, vous appliquez les résultats de cette sous-requête à votre requête principale.
L'résultant SQL généré par là, c'est assez propre, hibernate et renvoie les résultats à vous comme une liste d'objets.
OriginalL'auteur jasop
Avez-vous essayé d'utiliser une Projection sur l'ID et de créer une sous-requête basée sur ces résultats, comme décrit à la cette page?
EDIT: (à Noter qu'il semble y avoir un bug dans Oracle 11.2.0.1.0 qui peut vous empêcher d'obtenir les résultats que vous voulez, si c'est ce que vous utilisez.)
OriginalL'auteur Bruno
Ci-dessous est la façon dont nous pouvons faire Plusieurs de projection pour effectuer Distinctes
ExtraProjections.java
Exemple D'Utilisation:
Référencé à partir de https://forum.hibernate.org/viewtopic.php?t=964506
OriginalL'auteur Yashpal Singla