CriteriaBuilder Query прерывается при использовании fetch, но работает без - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть метод для получения одного желаемого Элемента.Для этого я хочу использовать идентификатор.Если я использую (root.fetch) для загрузки, этот запрос приводит к нулевым результатам.Но без этого все работает!Почему?

@Override
public Request getRequestById(int id) {
    CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
    CriteriaQuery<Request> criteriaQuery = criteriaBuilder.createQuery(Request.class);
    Root<Request> root = criteriaQuery.from(Request.class);
    Predicate equals = criteriaBuilder.equal(root.get("id"), id);
    root.fetch("products",JoinType.INNER);
    root.fetch("productiveShifts",JoinType.INNER);
    criteriaQuery.where(equals);
    return entityManager.createQuery(criteriaQuery.select(root)).getResultList().get(0);
}

1 Ответ

0 голосов
/ 12 сентября 2018

Это просто - с root не связано ни products, ни productiveShifts, поэтому пустой набор результатов.Помните, что вы используете INNER JOIN, поэтому ассоциация ДОЛЖНА существовать.

Если бы вы использовали левое соединение с другой стороны, оно, вероятно, работало бы так, как ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...