| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Hibernate: Фильтрация/Поиск сущностей по |
| Автор: powerOn 23.8.2009, 14:49 | ||||||||
| Всем привет! Использую Hibernate. Столкнулся со следующей задачей: Имеется сущность SomeObject и сущность Property связанные один ко многим. SomeObject агрегирует коллекцию Property. Property хранит 2 поля: name и value.
Получаются примерно следующие таблицы:
где id - это PK, а someObjectId - это FK. Необходимо выполнить фильтрацию/поиск сущностей SomeObject по значению полей в связанных Property. Например: наити все сущности SomeObject в коллекции properties которых содержатся 2 property, одно с name = someName1 и value = someValue1, а другое с name = someName2 и value = someValue2. Это не означает что у SomeObject только 2 Property, просто среди всех имеющихся должны быть те что удовлетворяют поставленным условиям. Два условия - два разных Property, три условия - три Property и т.д. Сделать поиск по одному условию несложно, например с помощью Criteria:
Я пытался использовать объединение условий, например:
но оно применяется, как не удивительно, к одному и тому же Property из коллекции... естественно prop.name никак не может быть одновременно и someName1 и someName2. Задачу можно перефразировать: выбрать все сущности SomeObject у которых есть property с name = someName1 и value = someValue1, а из полученного результата выбрать все сущности SomeObject у которых есть property с name = someName2 и value = someValue2. При этом предполагается что условий фильтрации может быть больше N. Сталкивался ли кто-нибудь с подобными задачами? Есть ли идеи по реализации? Если что неясно описал, то готов подробнее растолковать. P.S.: Я конечно знаю альтернативное решение: загрузить все сущности и фильтровать самостоятельно java-кодом, но я не знаю насколько это эффективно. Предполагаю что не очень |
| Автор: Старовъръ 23.8.2009, 16:36 |
| Не пробовал использовать http://docs.jboss.org/hibernate/stable/core/reference/en/html/querycriteria.html#querycriteria-examples? Никогда не пробовал, но может поможет... |
| Автор: Старовъръ 23.8.2009, 17:54 |
| О, а класс Subqueries? Название само за себя говорит. |
| Автор: powerOn 24.8.2009, 20:27 |
| Я покапаю в эту сторону, спасибо. |
| Автор: Andrey1 26.8.2009, 14:19 |
| Я обычно юзал подзапрос или прямое произведение таблиц в таких случаях (вставляя параметры, куда нужно). Но через Criteria конечно - более правильно (понятнее и легче поддерживать). P.S. Правда, юзаю JPA Hibernate и там Criteria нету, зато есть либы для DAO классов, а там уже есть. |
| Автор: VSergeyV 26.8.2009, 20:00 | ||
А в JPA(Toplink, EclipseLink) можно какнить задать критерии/фильтры на филды сущности OneToMany Collection? Они же подгружаются отдельными запросами, в Hibernate есть @Filter а в JPA как быть? |
| Автор: Andrey1 27.8.2009, 09:16 |
| VSergeyV, почему не отдельная тема |