![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| iLoveJava |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 29.7.2007 Репутация: нет Всего: нет |
Опишу проблему.
Есть у нас ентити юзер и ентити которые соответсвуют разным отношениям между пользователями (друзья, враги, собутыльники и т.д.). Собственно что мы хотим уметь делать. 1) Текущий пользователь ищет других a) мы хотим чтобы в результаты не попали те которые в каком-то отношении с этим текущим пользователем б) что бы в результаты попали только те которые в каком-то отношении с этим текущим пользователем 2) Текущий пользователь ищет других и хочет видеть информацию о пользователе и о состоянии его отношений с этим пользователем, если отношений нету он просто видит пользователя. Какие отношения участвуют будет задаваться как параметры для поиска. Количество отношений может увеличиваться могут появляться новые и т.д. т.п. В класса пользователя нету мапинга на отношения в отношений есть. Приблизительно как эти ентити выглядят (они конешно сложнее но для данной задачи ничего другого нам не надо)
В чем проблема: Я не могу искать с помощью критерии User-ов у них нету мапингов в тоже время куча остальных критериев поиска (цвет глаз/место жительства и т.д.) относятся только к User. И спользовать HQL чет не очень хочется но судя по всему по другому никак... Ну допустим мы решим юзать HQL... но ведь это превратится в какойто кошмар с генерацией этих строк... придется писать какоето подобие критерии что бы все было хоть более-менее сносным. Ситуацию как всегда усложняет куча существующего кода Уже есть целая иерархия класов поиска которые завязаны на критерии. Если раньше методы которые добавляли новые критерии поиска получали криетрию от предка и добавляли туда свои условия... то щас так просто все не выйдет. Надо будет может какой обект квери куда будут добавляться условия и ток уже при самом его вызове с низ будет формироваться HQL. Но у меня чувство что я буду изобретать велосипед! повторюсь ведь я сделаю в результате какоето подобие критерии Конешщно еще как вариант мы можем все это свести к вызову запроса потом обработке реузльтата через существующие сервисы... Но это тоже не впечатляет есть предчувствие что это мягко говоря будет не очень производительно. От пример: Мы дольжны выдать на страничку 20 юзеров (конечно может быть и меньше если они не соответствуют требованиям но интересней варинант когда их больше). 1) мы находим всех пользователей которых заблокировал текущий и добавляем условие что бы юзер не был в этом списке 2) потом ищем 20 юзеров 3) проходим по 20 пользователях и получаем все отношения которые хотел бы видеть текущий Вариант по хуже 1) делаем запрос на 20 юзеров которые соответствуют критериям 2) с этих 20 для каждого выясняем не заблочен ли он и если заблочен удаляем с результата 3) добавляем найденых пользователей в список 4) если у нас нету 20 пользователей идем в 1 иначе возвращаем первые 20 (так можна и 1000 запросов выполнить) 5) проходимся по ним и получаем для них отношения. 1 вариант кажется лучше 2 но не похож на очень то елегантное решение, а если пользователь заблокирует 500 человек у нас будет список для "not (user.id in (userIdList))" с 500 польхователями и тд. Хотелось бы получить что то такого рода: 1) делаем запрос на 20 пользователей в котором джоиним пользователя с таблицей заблоченых так что бы в результат не попали пользователи которых текущий заблочил ( ну или это просто можна добавить условием в запрос) 2) проходимся по ним и получаем для них отношения. (это мне тоже не нравится но чето я сомневаюсь что можна както по другому. Может как вариант искать отношения текущего с пользхователями которые попадают в список айдишек тогда будет 1 запрос на отношение вместо 1 запроса на пользователя) Поидее это будет похоже на проблему вывода чего-то в зависимости от настроек пользователя, но только в случае коргда, количество настроек не фиксировано и может увеличиваться соответственно код не дольжен зависеть от того что за настройки будут использоваться. Хотелось бы узнать как вы боретесь с подобными проблемами ( в часности если нету мапинга все одна дорога HQL?). п.с. где писать по хибернейту не понятно решил в этот раздел п.п.с. надеюсь излодил все понятно |
|||
|
||||
| iLoveJava |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 29.7.2007 Репутация: нет Всего: нет |
чувствую народ боится стены текста
|
|||
|
||||
| dementiev |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 8.2.2008 Где: Минск Репутация: 1 Всего: 1 |
сгенерь маппинг в нетбинсе(самому писать его не надо).
|
|||
|
||||
| afon |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 5.4.2008 Где: Украина, Киев Репутация: нет Всего: 1 |
>>чувствую народ боится стены текста
Да, очень много деталей сразу. Вникать не хочется. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |