![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
powerOn |
|
||||||||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 28 Всего: 159 |
Всем привет!
Использую 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-кодом, но я не знаю насколько это эффективно. Предполагаю что не очень ![]() |
||||||||
|
|||||||||
Старовъръ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.5.2008 Репутация: 1 Всего: 10 |
Не пробовал использовать Exapmle search? Никогда не пробовал, но может поможет...
-------------------- |
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 28 Всего: 159 |
||||
|
||||
Старовъръ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.5.2008 Репутация: 1 Всего: 10 |
О, а класс Subqueries? Название само за себя говорит.
-------------------- |
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 28 Всего: 159 |
Я покапаю в эту сторону, спасибо.
|
|||
|
||||
Andrey1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 621 Регистрация: 27.2.2004 Где: Moscow Репутация: 2 Всего: 5 |
Я обычно юзал подзапрос или прямое произведение таблиц в таких случаях (вставляя параметры, куда нужно).
Но через Criteria конечно - более правильно (понятнее и легче поддерживать). P.S. Правда, юзаю JPA Hibernate и там Criteria нету, зато есть либы для DAO классов, а там уже есть. -------------------- Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания. из сутры помоста шестого патриарха Хуэйнена |
|||
|
||||
VSergeyV |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 299 Регистрация: 9.5.2006 Где: Новосибирск Репутация: нет Всего: 3 |
А в JPA(Toplink, EclipseLink) можно какнить задать критерии/фильтры на филды сущности OneToMany Collection? Они же подгружаются отдельными запросами, в Hibernate есть @Filter а в JPA как быть? |
|||
|
||||
Andrey1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 621 Регистрация: 27.2.2004 Где: Moscow Репутация: 2 Всего: 5 |
VSergeyV, почему не отдельная тема
![]() -------------------- Созерцание и мудрость - едины. Соцерцание - это основа мудрости, а мудрость - это функция (т.е. умение использовать) созерцания. из сутры помоста шестого патриарха Хуэйнена |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |