Hibernate - HQL для выборки коллекции из однонаправленных отношений OneToMany

У меня есть класс с однонаправленными отношениями «один ко многим» следующим образом:

public class Order {
    @OneToMany(cascade = CascadeType.ALL)
    @JoinTable(name="order_item", joinColumns={@JoinColumn(name="order_id")}, inverseJoinColumns={@JoinColumn(name="item_id")})
    public Set<Item> getItems() {
        return items;
    }
} 

Обычно получить содержимое этого порядка несложно:

List<Item> items = order.getItems();

Но для чего угодно причина, по которой я мог бы захотеть каким-то образом отфильтровать свои результаты и получить только часть коллекции элементов, таких как все предметы, цена которых превышает определенную, ниже определенной цены и т. д., самым быстрым способом (не возвращая все, а затем фильтруя). Для этого я бы запустил HQL-запрос, чтобы получить элементы для определенного заказа и добавить еще кое-что в мое предложение where или в мой объект запроса.

Интуитивно мне хотелось бы такого поведения (что совершенно неверно):

SELECT jointable.ITEM from order_item as jointable inner join jointable.order where order = :order

Но, конечно, это неправильно, поскольку HQL работает с отображением сущностей, поэтому я не могу использовать таблицу соединений в запросе. Итак, как правильно это сделать?

Изменить:

Я нашел ответ на этот вопрос мне нужен следующий запрос:

Select o.items from Order o where o = ?

Это позволяет мне получить коллекцию товаров для заказа , без использования двунаправленной связи. Однако сейчас меня смущает второй этап этого вопроса, который заключается в том, как отфильтровать результаты этой коллекции, самый простой пример:

Select o.items from Order o where o = ? order by o.items.somenumberfield asc

Что возвращает незаконную попытку разыменования коллекции, так как мне отфильтровать свои элементы?

Редактировать:

Решение по заявке на самом деле правильное, я неправильно прочитал решение изначально.

8
задан mogronalol 24 November 2011 в 12:25
поделиться