Запрос критериев гибернации с предикатами для выбора записей из заданного списка идентификаторов

Я пытаюсь написать запрос Hibernate Criteria с Predicate для извлечения записей из db из заданного списка идентификаторов, где id - это столбец в таблице db.

Что я сделал

List<Predicate> predicates = new ArrayList<>();

for(String id : ids)
{
    predicates.add(builder.equal(root.get(MyModel.id), Integer.parseInt(id)));
}

//Other predicates I don't care about

Predicate queryPredicate = builder.and(predicates.toArray(new Predicate[predicates.size()]))

criteriaQuery.select(root);
criteriaQuery.where(queryPredicate);

Я получаю 0 результатов

1
0
660
1

Ответы 1

Я думаю, что id уникален для каждой строки. вы должны использовать OR вместо AND нравиться

Predicate queryPredicate = builder.or(predicates.toArray(new Predicate[predicates.size()]))

Логически неверно, что записи, у которых есть все идентификаторы.

ИЛИ

вы должны использовать метод CriteriaBuilder.in() для сопоставления записей с точными идентификаторами, которые вы даете.

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