Bonjour à tous,

On travaille actuellement avec les Detached Criteria pour récupérer une liste d'objets en Base, comme ceci :
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);
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).

Maintenant, on change pour aller chercher les éléments du 4 au 8 :
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);
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.

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.