Как выполнять сопоставления коллекций на основе пользовательских запросов в Hibernate?

У меня есть объект, которому сопоставлен набор объектов, очень просто. Тем не менее, что я действительно хочу сделать, так это поставить некоторые критерии для этого сопоставления. Вот текущее отображение:

    <set name = "ops" inverse = "true" cascade = "all, delete-orphan">
        <key column = "cityblock_id" on-delete = "cascade"/>
        <one-to-many class = "com.tamedtornado.data.Operation"/>
    </set>

Теперь, вместо того, чтобы просто получать все связанные операции, я хочу просто получить операции, которые не завершены, или есть, или что-то еще. В документации по Hibernate очень тихо по этому поводу, хотя некоторые старые сообщения на форуме показали мне немного. Очевидно, вы можете использовать тег sql-query, но это тоже не то, что я хочу делать.

Есть ли способ сделать это с помощью запроса HQL? Я просто хочу сузить результаты простым запросом и иметь несколько карт коллекций, таких как active_ops, completed_ops и т. д.

Ваше здоровье, Джейсон

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
4 372
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я не уверен, правильно ли я понимаю ваш вопрос, но похоже, что вам нужно использовать предложение where в вашем SQL-запросе

Вы должны иметь возможность использовать предложение where в своем HQL или использовать api критериев в спящем режиме для достижения желаемых результатов:

Предположим, у вас есть поле под названием status для «активного» или «завершенного», ваш HQL должен выглядеть примерно так:

from ops where status = "active"

или при использовании критериев api:

List activeOperations = sess.createCriteria(Operation.class)
    .add( Restrictions.equals("status", "active") )
    .list();

Об этом немного рассказывается в главах 14 и 15 руководства по гибернации: http://www.hibernate.org/hib_docs/v3/reference/en/html/index.html

Ответ принят как подходящий

В разделе 6.2. Сопоставления коллекций в документации Hibernate вы обнаружите, что можете использовать предложение WHERE для любого сопоставления коллекции:

где (необязательно) укажите произвольное условие SQL WHERE, которое будет использоваться при извлечении или удалении коллекции (полезно, если коллекция должна содержать только подмножество доступных данных)

Вы сказали, что хотите использовать HQL-запрос, но я не думаю, что это возможно. Но поскольку вам нужно указать только простое предложение WHERE в вашем сопоставлении, нет особой разницы между HQL и «настоящим» SQL.

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