Bonjour à tous,
On travaille actuellement avec les Detached Criteria pour récupérer une liste d'objets en Base, comme ceci :
Ca fonctionne super, et la liste d'objets renvoyée est bien triée dans le bon ordre tout ça, rien à dire, c'est niquel. Il enlève même les dupliqués renvoyés normalement sans le ResultTransformer (on n'a toujours pas compris pourquoi il y a des dupliqués mais soit).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 DetachedCriteria criteria = DetachedCriteria.forClass(Sample.class) .add(Restrictions.ge("validityDate", new Date())) .add(Restrictions.eq("sampleValidated", true)) .addOrder(Property.forName("sampleValidated").asc()) .addOrder(Property.forName("validityDate").asc()) .setResultTransformer(DistinctRootEntityResultTransformer.INSTANCE); List list=template.findByCriteria(criteria);
Maintenant, on change pour aller chercher les éléments du 4 au 8 :
La liste ne contient plus qu'un élément, alors que la liste précédente en contenait plus de 20. En fait, on pense que la fonction findByCriteria(criteria,int,int) fait l'opération "prendre uniquement à partir de 4 et pour un maximum de 4 élements" avant l'opération de gestion des dupliqués. On s'attendait à l'inverse.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 DetachedCriteria criteria = DetachedCriteria.forClass(Sample.class) .add(Restrictions.ge("validityDate", new Date())) .add(Restrictions.eq("sampleValidated", true)) .addOrder(Property.forName("sampleValidated").asc()) .addOrder(Property.forName("validityDate").asc()) .setResultTransformer(DistinctRootEntityResultTransformer.INSTANCE); List list=template.findByCriteria(criteria,4,4);
Alors du coup, on est coincés, comme on voulait éviter de le faire via substring(int,int) dans List...
Est-ce qu'on a fait une erreur quelque part ?
Comment faire en sorte que le retrait des dupliqués soit fait avant le scaling ?
Merci d'avance
F.
Partager