Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> hibernate load object by filtre, hibernate load object by filtre 
V
    Опции темы
askell
Дата 21.4.2010, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 12.11.2008

Репутация: нет
Всего: нет



Пипл хелп))) Очень нужно)))
Проблема следующая. Работаю с базой через hibernate. Использую критерю для обращения к объекту. У меня есть бин Manufacturer у него есть связь one-to-many к бину Product. Соответственно когда я вытаскиваю бин  Manufacturer он подгружает коллекцию объектов Product. Например производитель "HTC" и все его продукты. Мне нужно фильтровать это коолекцию чтобы продукты выбирались по полю стоимость. 

Criteria criteria = session.createCriteria(Manufacturer.class);
criteria.add(Restrictions.eq("code", getManufacturer().getCode()));

// незнаю что вставить чтобы getProductListCollection() возвращялась не вся а по заданному параметру

Manufacturer manufacturer = (Manufacturer)criteria.uniqueResult();
manufacturer.getProductListCollection() - нужно чтобы коллекция проинициализированая hibernate возвращала не все записи связанные с производителем а по критерию

На sql это делается в два запроса.

1) select * from  Manufacturer m where m.id = 5- получаем производителя
2) select * from Product p where p.manufacturerId = 5 and p.cost = 100 
PM MAIL   Вверх
5ad1sT
Дата 22.4.2010, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 10.2.2009

Репутация: нет
Всего: нет



Попробуй вот такой рестрикшн Restrictions.sqlRestriction(sql).
PM MAIL   Вверх
askell
Дата 22.4.2010, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 12.11.2008

Репутация: нет
Всего: нет



Цитата(5ad1sT @  22.4.2010,  10:32 Найти цитируемый пост)
sqlRestriction


А по подробнее можешь написать? 


PM MAIL   Вверх
5ad1sT
Дата 22.4.2010, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 10.2.2009

Репутация: нет
Всего: нет



PM MAIL   Вверх
askell
Дата 22.4.2010, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 12.11.2008

Репутация: нет
Всего: нет



Цитата(5ad1sT @  22.4.2010,  14:07 Найти цитируемый пост)
Вот пример. http://www.java2s.com/Tutorial/Java/0350__...ntoCriteria.htm



Спасибо, только это совсем не то:
Criteria crit = session.createCriteria(Survey.class);
    crit.add(Restrictions.sqlRestriction("name like 'S%'"));

здесь он непосредственно добавляет критерию в обект Survey, а в моем случае producs является коллекцией из другой таблицы в объекте Manufacturer. Hibernate генерит отдельный запрос для получения этих данных.
PM MAIL   Вверх
MisterCleric
Дата 23.4.2010, 09:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Привет.
В книжке Java persistence with hibernate
Есть такая глава: 12.3.1 Dynamic data filters
Так вот там и написано о желаемых фильтрах:
Цитата

 If the association between Category and Item was one-to-many, you’d created
the following mapping: 
<class name="Category" table="CATEGORY">
    ...
    <set name="items">
        <key column="CATEGORY_ID"/>
        <one-to-many class="Item"/>
        <filter name="limitItemsByUserRank"
                condition=":currentUserRank >=
                           (select u.RANK from USERS u 
➥ where u.USER_ID = SELLER_ID)"/>
    </set>
</class>
With annotations, you just place the  @org.hibernate.annotations.Filter(s)
on the right field or getter method, next to the  @OneToMany or  @ManyToMany
annotation. 


Сам никогда их не пробовал, но вот есть такое. Попробуй - расскажешь


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
askell
Дата 24.4.2010, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 12.11.2008

Репутация: нет
Всего: нет



Спасибо) Этот вариант отлично подойдет))
PM MAIL   Вверх
askell
Дата 1.5.2010, 02:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 12.11.2008

Репутация: нет
Всего: нет



Фильтры вообще штука классная. я не знал что их можно использовать внутри маппинга для связей. Сорри, этот вариант я юзал только в тесте, все отлично))))
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0878 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.