Mise en veille prolongée, obtenir des valeurs en double
-
09-10-2019 - |
Question
Je suis en train d'écrire une requête très simple, mais je reçois des valeurs en double pour une raison quelconque.
Criteria cr = session.createCriteria(ProcessInstance.class, "p")
.add(Restrictions.isNull("end"));
@Cleanup ScrollableResults sr = cr.scroll(ScrollMode.FORWARD_ONLY);
while (sr.next()) {
pi = (ProcessInstance) sr.get(0);
String id = pi.getId(); //Getting duplicate values
}
Le pi.getId()
renvoie des valeurs en double. à savoir: *9,9,10,10,11,11 etc*
Toutefois, l'exécution de cette requête directement dans MySQL
SELECT * FROM JBPM_PROCESSINSTANCE J where J.END_ IS NULL
Ne retourne pas les valeurs en double.
spot Quelqu'un peut-il ce qui est faux?
La solution
Le workarround rapide serait d'utiliser un résultat Distinct racine entité Transformer.
...
crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
List unique = crit.List();
...
Mais ce n'est un workarround.
Je QUES le problème appartient à votre cartographie. En cas de hâte chargée 1: n relation de ProcessInstance à autre chose (appeler X), et il y a plusieurs (n) X pour une ProcessInstance, la vous obtiendrez plusieurs articles de processInstance (n) dans la liste des résultats pour une seule ProcessInstance. -. Si cela est vraiment la cause, que le workarround est pas seulement un workarround, il serait alors la solution
Autres conseils
J'encouter le même problème que vous ..
Voici comment je l'ai résolu.
Criteria cr = session.createCriteria(ProcessInstance.class, "p")
.add(Restrictions.isNull("end")).setProjection("id")
retourne volonté tous les ID qui satisfont tous vos critères.
après avoir utilisé les restrictions de In
et d'effectuer CriteriaSpecification.DISTINCT_ROOT_ENTITY
.
Vous pourrez faire défiler votre résultat dans les critères 2e .. J'espère que cette aide.