Вопрос

Я пишу очень простой запрос, но я получаю дублирующие значения по какой-то причине.

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
}

То pi.getId() Возвращает дублирующие значения. IE: *9,9,10,10,11,11 etc*

Однако запуск этого запроса непосредственно в MySQL

SELECT * FROM JBPM_PROCESSINSTANCE J where J.END_ IS NULL

Не возвращает дублирующие значения.

Может ли кто-нибудь место, что не так?

Это было полезно?

Решение

Быстрое Workaround будет использоваться отдельный трансформатор результата корневого объекта.

...
crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
List unique = crit.List();
...

Но это только Workaround.

Я проверяю проблему к вашему отображению. Если есть какие-либо нетерпение, загруженные 1: N отношений от процессанстанта на что-то другое (вызовите его X), и есть несколько (n) x для одного процессора, то вы получите несколько элементов процессора (N) в списке результатов для одного ProcessIntance. - Если это реально причина, чем Workaround - это не просто для работы, то это будет решение.

Другие советы

Я начнут ту же проблему, что и вы ..

Вот как я решаю это.

Criteria cr = session.createCriteria(ProcessInstance.class, "p")
        .add(Restrictions.isNull("end")).setProjection("id")

Это вернет весь идентификатор, который удовлетворяет всем вашим критериям.

Там после использования In Ограничения и выступление CriteriaSpecification.DISTINCT_ROOT_ENTITY.

Вы сможете прокрутить свой результат в 2-го критериях. Я надеюсь, что эта помощь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top