CriteriaBuilder с критериями детских ассоциаций.зимовать - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть заказы (id, name) с oneToMany на элементы (id, name):

Как я могу получить только те заказы, которые имеют элементы с именем 'banana' с помощью CriteriaBuilder:

   @Override
    public Order orderQuery() {

        CriteriaBuilder cb = entityManager.getCriteriaBuilder();
        CriteriaQuery criteriaQuery = cb.createQuery(Order.class);
        Root root = criteriaQuery.from(Order.class);
        root.fetch("items", JoinType.INNER);
        CriteriaQuery d = criteriaQuery.select(root);

        criteriaQuery.where(cb.equal(root.get("item.name"), "banana"));
        return (Order)this.entityManager.createQuery(criteriaQuery).getSingleResult());

    }

Я получаю ошибку:

Unable to locate Attribute  with the the given name [item.name] on

1 Ответ

0 голосов
/ 07 февраля 2019

Вам необходимо использовать Join.Что-то вокруг этих строк:

Join< Order ,Item> joinItems = root.join("items");
criteriaQuery.where(cb.equal(joinItems.get("item.name"), "banana"));

альтернативно вы можете сделать что-то вроде:

criteriaQuery.where(cb.equal(root.get("items").get("name"), "banana"));
...