![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Swatch |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 453 Регистрация: 2.7.2007 Репутация: 1 Всего: 1 |
Добрый день.
есть таблицы авторов, категорий и сообщений. автор может писать в разных категориях много сообщений... мне нужно написать запрос, чтобы из списка сообщений для конкретной категории строился список авторов, которые писали в эту категорий, причем, чтобы авторы не повторялись... нужно, чтобы этот запрос выполнялся в критерии выборки для хибернейта: вот создание критерия:
Помогите, пожалуйста, что в этом критерии надо исправить, чтобы все заработало?! сейчас пишет ошибку:
|
||||
|
|||||
| iluvatar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 266 Регистрация: 17.9.2007 Репутация: 4 Всего: 4 |
Во-первых, непонятно что у тебя за проблема. Проблема с соединением hibernate, генерацией запроса или составлением запроса?
А во-вторых эта тема уже поднималась. линк. Зачем создавать новую? Напиши что именно не так и что тебе непонятно. |
|||
|
||||
| Swatch |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 453 Регистрация: 2.7.2007 Репутация: 1 Всего: 1 |
мне не понятно, как составить запрос (или критерий выборки), чтобы с помощью хибернейта получить эти данные...
|
|||
|
||||
| iluvatar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 266 Регистрация: 17.9.2007 Репутация: 4 Всего: 4 |
у тебя есть список сообщений. у каждого сообщения есть категория и автор. тебе нужно получить список авторов, написавших эти сообщения?
скажу сразу, лучше использовать HQL (подробнее). |
|||
|
||||
| Swatch |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 453 Регистрация: 2.7.2007 Репутация: 1 Всего: 1 |
написавших эти сообщения в конкретной категории...
|
|||
|
||||
| iluvatar |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 266 Регистрация: 17.9.2007 Репутация: 4 Всего: 4 |
то есть я понял так:
Описание классов:
На каком-то этапе имеем List<Message> messages. Надо получить всех авторов этих сообщений для какой-то отдельной темы. Проще всего сначала отделить все сообщения этой темы из списка сообщений и сразу берем только id. Сделать это не в запросе, а заранее. То есть теперь у нас есть List topicMessagesIds
Это для HQL. Для критериев чуть посложнее - надо использовать алиасы. Кроме того, если понадобится получить не только id авторов, но и сами объекты и сделать сортировку, то делать придется в 2 захода. (читай ссылку, которую я тебе дал). Если я что-то не так понял, напиши. Это сообщение отредактировал(а) iluvatar - 31.1.2008, 11:06 |
||||
|
|||||
| Swatch |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 453 Регистрация: 2.7.2007 Репутация: 1 Всего: 1 |
мне надо получить не просто ид_авторов, мне надо получить список авторов, такой же, как List<Message> messages, со всеми вытекающими последствиями, то есть чтобы можно было обращаться к элементам списка, брать значения.... то есть сортировку можно не делать, но сами объекти получить обязательно, причем обязательно в виде списка...
я прочитала ссылку, которую вы дали... но, если честно, я не понимаю, как переделать то, что вы написали в критерий... и что вот это (:p_msg_ids) такое??? у меня есть классик, с помощью которого я должна получить список авторов... вот этот классик:
но с составлением критерии выборки я пока теряюсь.... там можно написать HQLзапрос? а можно его переделать в критерию? если можно, то подскажите, пожалуйста, КАК??? |
|||
|
||||
| Kangaroo |
|
|||
|
AA - Aussie Animal ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 14 Всего: 104 |
Вам нужно написать HQL запрос или использовать критерию? Это же разные вещи.. В критерию вы засовыаете объект-шаблон по которому искать. Покажите класс statements -------------------- Lost.... |
|||
|
||||
| Llucas |
|
|||
![]() J2EE Developer ![]() Профиль Группа: Участник Сообщений: 160 Регистрация: 29.11.2006 Где: Одесса Репутация: нет Всего: нет |
Нарисуй структуру таблиц и мы тебе напишем HQL запрос, который вернет тебе нужные объекты. И не придеться мудрить с Criteria.
|
|||
|
||||
| Swatch |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 453 Регистрация: 2.7.2007 Репутация: 1 Всего: 1 |
author.class
category.class
statements.class
вот это классики для создания таблиц с помощью хибернейта. Думаю, из них структура понятна... |
||||||
|
|||||||
| Ornitos |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.10.2007 Где: Непал Репутация: 1 Всего: 3 |
Поиск по образцу и критерии -- не одно и тоже.
Если в классе Message был бы не идентификатор автора, а ссылка на объект автора, то можно было бы обойтись одним запросом с Projection. Структуру таблиц лучше не рисуй. А покажи твои аннотированные классы, по которым нужна выборка. Или хмл метаданные, если ты их используешь. Добавлено через 7 минут и 20 секунд Идея примерно такая
Чтобы искать по идентификатору категории или имени, нужно добавить простой подзапрос |
||||
|
|||||
| Swatch |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 453 Регистрация: 2.7.2007 Репутация: 1 Всего: 1 |
объясните, пожалуйста, критерий, который вы написали... точнее, последнюю строку. что она делает???
понятно, что add(Restrictions.eq("category_id", categoryToSearchIn)) - накладывает ограничение на выборку - выбор по конкретной категорий.... а дальше??? и все-таки, я ведь получу список сообщений, а не список авторов, раз
а как потом брать данные об авторах??? мне список авторов нужен, чтобы в построить дерево категория1 автор1.1 автор1.2 .... категория2 автор2.1 автор2.2 ... |
|||
|
||||
| iluvatar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 266 Регистрация: 17.9.2007 Репутация: 4 Всего: 4 |
это параметр. потом делаем setList("p_msg_ids", msg_ids) и все снова ХА-РА-ШО! В принципе можно сразу подставлять список (т.е. ...in (msg_ids) ..) Скажи, а пользоваться критериями обязательно? Просто я долго их испольховал, но потом перешел на hql. Это намного удобнее и эффективней. Очень часто бывает такое, что sql-запрос составить легко, а перенести на критерии уже сложнее (как в твоем случае). |
|||
|
||||
| Swatch |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 453 Регистрация: 2.7.2007 Репутация: 1 Всего: 1 |
дело в том, что я свою работу с БД начала не с SQL-я, а сразу с хибернейта... конечно, базовые знания SQL-я были... вот сейчас изучаю постепенно SQL более подробно... а к критериям уже привыкла... они понятнее кажутся... а где можно про hql почитать? думаю, даже уверена, что может понадобиться....
Всем, спасибо. задача решена. |
|||
|
||||
| Ornitos |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 13.10.2007 Где: Непал Репутация: 1 Всего: 3 |
http://www.manning.com/bauer2/ Где-то в инете я находил бесплатную электронную версию Это сообщение отредактировал(а) Ornitos - 31.1.2008, 15:18 |
|||
|
||||
| iluvatar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 266 Регистрация: 17.9.2007 Репутация: 4 Всего: 4 |
HQL это объектный SQL. А SQL надо знать обязательно. Если не понять как он утроен, с БД работать будет крайне сложно.
ссылко на hibernate-docs |
|||
|
||||
![]()
|
| Правила форума "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. |