|
|
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Допустим у меня есть таблица пользователей и таблица коментариев их. Нужно связать их один к многим и многие к одному соответственно. В таблице коментариев напишу: Код: java 1. 2. 3. Всё какбы понятно и просто. Далее напишу метод, который вернет мне Lист с коментариями пользователей и собсно самих пользователей.. criteria.setFetchMode("account", FetchMode.JOIN); и всё такое. Передам этот Lист в JSP и там получу имя пользователя напротив каждого коментария. А можно как-то ещё получить имя пользователя в JSP если не использовать @ManyToOne, а просто в таблице коментариев сделать поле id_user? Ну может примерчик какой есть с учетом, что TomCat 6 и нельзя там вызывать методы. Как выкрутится? Подскажите пожалуйста. Получается в JSP передам Lист коментариев и у каждого элемента будет свойство id_user. Т.е. айдиху пользователя только получу, а как по ней имя тамже получить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 15:49:13 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
А цель какая? Не нравится JOIN? Догрузи отдельным запросом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 15:54:19 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
jabА можно как-то ещё получить имя пользователя в JSP если не использовать @ManyToOne, а просто в таблице коментариев сделать поле id_user? ты его и сделал, указав аннотацию хиберу. Насчёт 6-ки не в курсе такого изврата, но ставь 7-ку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 15:55:31 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
BlazkowiczА цель какая? Не нравится JOIN? Догрузи отдельным запросом. Как отдельным запросом грузить? Нужно в самом JSP передать какойто обьект, который по id_user будет возвращать его имя? Но получается что методы не выполнить в шестерке. Как это делать? Petro123Насчёт 6-ки не в курсе такого изврата, но ставь 7-ку. Не могу ничего ставить там. Что есть, с тем и приходится выкручиваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 16:05:01 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
jab, в хибере afaik есть вычисляемое псевдо поле" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 16:08:39 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
jabКак отдельным запросом грузить? FetchMode.SELECT jabНужно в самом JSP передать какойто обьект, который по id_user будет возвращать его имя? Почему именно в JSP? Это самоцель какая-то? Или что? Почему не выбрать автора сразу? jabНо получается что методы не выполнить в шестерке. Как это делать? Какие методы?? О чем речь? При чем здесь вообще Tomcat? Свойства из EL отлично вызываются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 16:10:54 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
В чем проблема использовать @ManyToOne ? Если хочется отказатся от ORM в пользу более "насыщенной" модели, то делаешь свойство getAuthor(), которое по id через репозиторий вытягивает объект. Посмотри паттерн Repository у Фаулера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 16:15:08 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Проблема какая-то надуманная ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 16:20:03 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 16:25:16 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
BlazkowiczПочему именно в JSP? Это самоцель какая-то? Или что? Почему не выбрать автора сразу? А как сразу то? Должна быть колекция сообщений у которых должно быть свойство обьект пользователь (private Account account;), а не просто его id_user. Ну или хотябы свойство имя пользователя или тот параметр, который мне нужен. Это мне заранее надо както в моделе сообщений прописывать или делать ещё одну модель сообщений с этим свойством спецально заточенную под это дело? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 16:37:03 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Так. По порядку. jabВсё какбы понятно и просто. Далее напишу метод, который вернет мне Lист с коментариями пользователей и собсно самих пользователей.. criteria.setFetchMode("account", FetchMode.JOIN); и всё такое. Передам этот Lист в JSP и там получу имя пользователя напротив каждого коментария. Что не так в этой модели? Почему хочется сделать иначе?: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 16:38:57 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
jabДолжна быть колекция сообщений у которых должно быть свойство обьект пользователь (private Account account;), а не просто его id_user. Если использовать прокси, то так и будет. С той лишь разницей что id будет не в comment.id_user, а в comment.user.id. Какая разница где он находится? На что это влияет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 16:40:26 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЧто не так в этой модели? Почему хочется сделать иначе? С этой моделью всё хорошо и всё в порядке. Именно так я делал раньше. А сейчас вот получилось так, что у меня нет этой связки, а есть просто колумн id_user. Вот по этому и хотел узнать, как можно добраться до имени пользователя, не переделывая модель под много к одному. Т.е. может есть простой способ добраться, про который я не знаю. Хотел расширить кругозор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 16:46:06 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
jab, я читал такие подходы: - действительно, view модель не соответствует модели хибера, поэтому перед отдачей в респонс её доводят черед DTO\VO\JOIN Но мне это не нравится, т.к. я ленивый программист. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 16:47:57 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
jabА сейчас вот получилось так, что у меня нет этой связки, а есть просто колумн id_user. А куда она делась? jabВот по этому и хотел узнать, как можно добраться до имени пользователя, не переделывая модель под много к одному. Т.е. может есть простой способ добраться, про который я не знаю. Хотел расширить кругозор. Можно добавить транзиентное поле в коментарии. И после загрузки проставить автора. Желательно всё это делать до JSP. Тогда и вопросов как тот или иной метод вызывать из JSP не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 16:49:25 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
на хабре обсуждалось, нужны ли id на клиенте и как их заменять на имена или развёрнутые связки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 16:50:08 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Так вот, насчет лени. У меня сейчас есть: Код: java 1. 2. А нужно переделать на: Код: java 1. 2. 3. Соответственно в табличке с комментами нужно добавить FK на акаунт, ну или выгрузить все данные, перекриэйтить таблички хибером всё заново и загрузить данные поверх в пустые новые таблички. Как-то много действий надо делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 16:52:37 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
jab, приведи структуру таблиц в БД реальную "сейчас есть". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 16:59:25 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Хотя может и правда, имеет смысл делать облегченные модельки. И грузить в них только нужное .createSQLQuery(query).list(); из запроса. Потом эту модельку отдавать в JSP. Там обращаться к свойствам. Всё получается просто и понятно и минимум памяти отнимет на неиспользуемое. Только получится ухожу от FK в БД. Целостность придется как-то вручную поддерживать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 17:01:12 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
jabЦелостность придется как-то вручную поддерживать. плохо. Лучше переделать. Приведи схемку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 17:04:38 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
вот минимум что нужно (если угадал) Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 17:11:33 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Petro123приведи структуру таблиц в БД реальную "сейчас есть". Задолбаюсь тут приводить структуры.. там много чего надо приводить и разбираться потом в этом никому не захочется. Petro123 Смотри! Попробую на словах обьяснить. Идея такая. Есть у меня пользователи и есть у пользователей публикации. Пользователей может быть много и у каждого пользователя может быть много публикаций. Публикация из себя представляет обложку, наименование, некоторое описание, текст публикации, к каким категориям относится, ну и ещё некоторые параметры. Мне нужно получить мои публикации, при этом я должен видять только обложку, наименование, описание, к каким категориям относится, дату создания, количество коментариев. Собсно почти все за исключением массивного поля текста публикации. И вот ещё важный момент. Мне нужно получить количество коментариев, а не колекцию этих коментариев. Так бы я через связки получил колекцию и узна size(), но нахрена козе баян? Нахрена лишние обьекты ради сайза? Нахрена мне текст публикации, если его я не должен видять в списке моих публикаций, а он порядком места будет занимать до 200 000 символов. Так вот тянуть весь этот обьем из БД в память как бы не рационально и не оправдывает это простоту написания кода. Надо чтото усложнить в коде, но меньше грузить память и БД. Вот и думаю делать простые модельки для каждого случая, но не замапленные на таблички. В них выбирать запросом нужное. Как такая мысль? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 17:19:38 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
чтобы узнать size у коллекции совсем не обязательно тянуть всю коллекцию, причем это в хибернейте с самого начала. int count = select * from Comments c where c.user.id = : userId ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 17:28:11 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Blazkowicz А куда она делась? Не делось, просто новый проект. Так вот почемуто сразу не сделал, а теперь вот что есть, то есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 17:28:21 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
jabКак такая мысль? ты не ответил, выше код подходит? Учти одни непреложные правила: - первична доменная модель и идти надо не от view а от текста-КОДА что я привёл выше. - именно для этого модель в БД нормализуют ДЛЯ бд, а не для удобства в JSP - чтобы не грузить, есть LAZY ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 17:30:40 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
и ещё. Для FK не надо ничего и никуда выгружать. Структура не меняется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 17:32:00 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
забыл никчтобы узнать size у коллекции совсем не обязательно тянуть всю коллекцию, причем это в хибернейте с самого начала. int count = select * from Comments c where c.user.id = : userId Не понял. Есть public List<Article> и у каждого Article есть private Set<Comment> comments; Как же узнать сайз Set<Comment> не затянув его? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 17:34:58 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Petro123ты не ответил, выше код подходит? Примерно аналогично я и делал, только с LAZY ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 17:36:38 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
jabНе понял. Есть public List<Article> и у каждого Article есть private Set<Comment> comments; Как же узнать сайз Set<Comment> не затянув его? Никто так не делает. У юзеров тысячи коментариев. Никто не затягивает всю коллекцию. Размер получают отдельным COUNT запросом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 17:43:12 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
jabКак же узнать сайз Set<Comment> не затянув его? насколько в курсе, то код в JSP выполняется в момент рендеринга в респонсе. Т.е. всё что нужно ДОЛЖНО быть загружено. Иначе, сессия хибера будет закрыта и будет исключение. Приведи кусок кода для "зачем узнать размер коллекции" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 17:44:55 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 17:50:44 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
забыл никint count = p.getChildren().size(); // the collection is not loaded, only its size И правда. Был не прав. AbstractCollectionPersister.generateSelectSizeString(...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 17:54:17 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Мм.. а теперь как этим способом мне вывести количество коментариев в JSP? Допустим я имею отдель но табилчку пользователей и отдельно табличку коментариев. Делаю простую страничку, на которую мне надо вывести всех пользователей с их количеством коментариев. Например для MySQL: select user.*, (select count(*) from comment where comment.id_user = user.id_user) as countCom from user Как в хибере тоже самое сделать? Чтоб при этом не вытягивать колекции сообщений для каждого пользователя в колекции пользователей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 18:06:49 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
jabДелаю простую страничку, на которую мне надо вывести всех пользователей с их количеством коментариев. Для этой задачи только HQL/SQL. Иначе (если через коллекции), то будет COUNT запрос на каждого юзера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 18:14:30 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Из этого запроса я могу выдрать модель user и у меня останется ещё параметр countCom, которыхй какбы нужно прикрутить к пользователю както... Мм... не знаю как.. Код: java 1. 2. 3. 4. 5. 6. 7. Как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 18:15:02 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Это получается что надо делать ещё одну модель User с стандартными параметрами и с параметром countCom? Например назвать модель UserCntCom и в критерию её. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 18:23:24 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Или даже не с стандартными параметрами, а наследник User и с доп параметром. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 18:24:22 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Нузачем сразу новую сущность? Создай простое DTO. и получи вот так select new UserDTO(u, countCom) from select user.* as u , (select count(*) from comment where comment.id_user = user.id_user) as countCom from user ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 18:42:15 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
забыл никСоздай простое DTO. Как их делают то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 18:57:33 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
забыл никselect new UserDTO(u, countCom) Не знаю такую конструкцию. Куда это писать то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 18:58:41 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
jab Код: java 1. А зачем подзапрос? Почему через group by не сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 19:01:19 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
jabНе знаю такую конструкцию. Куда это писать то? HQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 19:01:33 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
BlazkowiczА зачем подзапрос? Почему через group by не сделать? Потому что group by не будет работать с user.* В общем возвращаясь к DTO. У меня была мысль сделать класс с двумя пропертями. Первый пропертя это обьект Urer, а второй пропертя это Integer countCom. Но я не знаю как теперь в него забивать данные из того запроса, что привел. Неужели в цикле обходить? Может както замапить на запрос можно. Поискал... чот не нахожу ничего подходящего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 19:06:22 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
авторНе знаю такую конструкцию. Куда это писать то? DTO - это простой класс, без аннотации Entity, все это делается через hql. Кстати DTO - это еще и паттерн но тут он используется не совсем классически ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 19:07:59 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
jabПоискал... чот не нахожу ничего подходящего. Блин это как надо было искать? Гугл -> Hibernate HQL Первая же ссылка http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html Ctrl+F -> new 14.6. The select clause - куча примеров ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 19:08:58 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
jabПотому что group by не будет работать с user.* Можно через join сделать. Ну, это уже оптимизация на будущее, если что. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 19:13:22 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
забыл никDTO - это простой класс, без аннотации Entity, все это делается через hql. Это понятно. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Дальше то что писать? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Так чтоли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 19:37:25 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
.. очепятка List<Article> List<UserDTO> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 19:38:52 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
ну и? не работает чтоли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 19:41:42 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Конечно не работает! TomCatorg.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.hql.ast.QuerySyntaxException: unexpected token: select near line 1, column 38 [select new UserDTO(u, countCom) from select account.* as u , (select count(*) from comment where comment.id_user = account.id_user) as countCom from account] У меня табличка с ерами по другому называется. Ещё раз: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. И вызываю: List <UserDTO> userDTO = accountDao.getAllUserCntCom(1, 5); ошибка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 20:33:56 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Почемуто мне кажется, что и не должно работать.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 20:41:28 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Перепробовал кучу вариантов.. И со скобками разными и без скобок и через критерию... Нихрена не получалось. Получился только один вариант, но он мне что-то не сильно нравится. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. Вызываю: List <UserDTO> userDTO = accountDao.getAllUserCntCom(1, 5); В JSP получаю: Код: xml 1. 2. 3. Выводит всё правильно. НО! не получилось с // query.setFirstResult(FirstR); // query.setMaxResults(MaxR); .. да и вообще через задницу как-то всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 22:04:28 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Ну не айс конечно, но можно как минимум упростить Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. Или так тоже не работает? Вообще надо конечно посмотреть на хибернейт "select new", давно не пользовался, может такое как я предлагал и невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 22:27:06 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Такое упрощение приводит к ошибке: TomCatorg.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 22:45:16 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
В логах LogSEVERE: Servlet.service() for servlet [dispatcher] in context with path [/urbby] threw exception [Request processing failed; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query] with root cause com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'account' in 'field list' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 22:46:52 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Собсно оно и логично! Этож просто SQL. Есть ещё варианты как выдрать из запроса обьект и просто дополнительные поля? И при этом, чтоб работало: // query.setFirstResult(FirstR); // query.setMaxResults(MaxR); .. то понаписано много, а рабочего примера так и нет. Начинает казаться, что нет возможности это реализовать стандартными методами хибера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 22:51:36 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
jab, Hibernate 3.2: Transformers for HQL and SQL http://relation.to/2133.lace http://sysdba.org.ua/index2.php?option=com_content&do_pdf=1&id=188 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2012, 23:04:53 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Я видял эти странички. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. .. только не понял ничего из этого. Извините, но я наверно тупой! Можно разьяснить? А вернее лучше покажите, как из этого сделать то что мне нужно. Пожалуйста. Что за класс Enrolment.class ? Где его описание? В DTO классе StudentDTO всего 2 строковых поля, а у меня ещё и обьект нужно. Вариант с HQL тоже мне не прояснил ничего: Код: java 1. 2. 3. 4. 5. 6. 7. 8. Тут получаем примитивные типы в обьект StudentDTO с двумя примитивными типами. Тоже самое можно сделать и без трансферов, а просто указать в какой класс забрать. У меня же нужно в обьекте DTO заполнить другой обьект и примитивный тип. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2012, 13:52:31 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
jab, я тоже данню фичу не юзал, но могу покопать вместе. Только торопиться не будем. Тебе на клиенте надо список ФИО Кол-во_сообщенийиванов 15Петров 0Сидоров 15так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2012, 14:20:20 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
jab, Может и не в тему но когда пишем select new User(... нужно писать конструктор вместе с пакетом типа select new com.example.User(... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2012, 14:29:09 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
jab, ещё нашел упущение в вашем DTO нет конструтора в который передаются параметры, а ещё когда его напишите, не забудьте определить пустой конструктор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2012, 14:36:31 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Petro123 , ну в принципе да! Только там ещё id пользователя беру. Но это уже не принципиально я так понимаю. Главное что в DTO есть классы и примитивные типы и надо туда както выгрузить резалт. Вариант с циклом я приводил и он работает, но думаю должны быть готовые решения без циклов. GregTk , да х.з. я делал конструктор как в примере. Т.е. пустой конструктор как и для сучности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2012, 14:40:47 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Данная фича позволит экономить память. Не нужно будет тянуть все сообщения пользюков, чтоб потом подсчитать их size(). Не знаю, как вы умудряетесь обходится без этого. Разве что в цикле для каждого юзверя вызывать отдельный запрос select count(*) но это ИМХО бредово... ещё хуже чем в цикле заполнять как в моем примере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2012, 14:44:34 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
jabсучности jabГлавное что в DTO есть классы и примитивные типы dto это и есть классы = список объектов = коллекция для таблички на клиенте выше. С минимальным кодом для ленивых программистов. OK. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2012, 14:46:56 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Petro123, мммм. А почему ты не хочешь заполнить НОВУЮ коллекцию на НОВОМ классе на основе голимого sql Код: sql 1. Задача упрощается до: - на основе селекта хиберу - создать коллекцию ValueObj ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2012, 14:56:25 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Ну тогда совсем дело не в селекте. Придется делать классы уникальные на каждый подобный селект. Хотя с другой стороны приходится делать теже классы примитивные с внутри с стандартными классами обьектов. Можно и так, но всеже интересно какже с вариантом DTO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2012, 16:08:02 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
jabНу тогда совсем дело не в селекте. Придется делать классы уникальные на каждый подобный селект. Хотя с другой стороны приходится делать теже классы примитивные с внутри с стандартными классами обьектов. Можно и так, но всеже интересно какже с вариантом DTO. я тебя не понял: - DTO сейчас не модно и оверхед - DTO это тот же простой класс для передачи на клиента (из SELECT что я написал) - DTO как спецификация и паттерн был очень давно, и теперь под большим вопросом. - разве Хибер не умеет ДЕЛАТЬ классы сам на основе запроса? (должен) Самое главное, что на каждое Окно-VIEW-форму _надо_ делать свои запросы и коллекции, если угодно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2012, 16:18:27 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Petro123я тебя не понял: - DTO сейчас не модно и оверхед - DTO это тот же простой класс для передачи на клиента (из SELECT что я написал) - DTO как спецификация и паттерн был очень давно, и теперь под большим вопросом. - разве Хибер не умеет ДЕЛАТЬ классы сам на основе запроса? (должен) Самое главное, что на каждое Окно-VIEW-форму _надо_ делать свои запросы и коллекции, если угодно. С этого надо было начать. Но тем не менее всем спасибо! Есть как минимум 2 варианта получать нужные данные, жалко с DTO так и не решилось хоть и атовизм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2012, 16:44:23 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Значит пробую так: http://relation.to/2133.lace http://eldoradosoftware.blogspot.com/2009/03/hibernate-aliastobean-transformer.html Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Чо за хрень? Пишет ошибку: авторorg.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of com.mycom.urbby.model.AccountCntCom.id_user И с конструктором пробовал public AccountCntCom() { } и без и с .setCacheMode(CacheMode.GET) и без и всё одна ошибка. И делал конструктор в стиле // public AccountCntCom(Long id_user, String username) { // this.id_user = id_user; // this.username = username; // } Всё одно и тоже. В чем проблем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2012, 18:44:09 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
В общемто я ещё немного повозился и выяснил, что почемуто надо тип указывать: .addScalar("id_user", Hibernate.LONG) .addScalar("username", Hibernate.STRING) Так заработала хрень. Почему об этом не сказано в тех замечательных примерах по линкам? .. нет слов, одни эмоции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2012, 19:10:49 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Как тоже самае сделать с помощью Criteria и HQL? Чот не получается тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2012, 19:22:43 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
jab, Я делал на основе DTO и это работало, если хочешь с ним разбраться то поправь своё решение как я написал выше и покажи exception который выпадет(если выпадет :) ). Делал я это как раз на JPA с hibernate провайдером, тоже что и у тебя. А вообще по этой теме была хорошая книга Java Persistence API in Action, там достаточно подробно это всё описанно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2012, 19:41:21 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
jabПочему об этом не сказано в тех замечательных примерах по линкам? .. нет слов, одни эмоции. У команды JBoss всё время такие косяки :) Говно-код + плохая дока. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2012, 19:42:33 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
GregTk , выше..? это имелось в виде: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2012, 19:54:37 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
мелкие косяки.. может в какойто момент из-за подобного и не заработало. Поправил конструктор: Код: java 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2012, 19:56:07 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
jab, еще в запросе укажи имя конструктора с пакетом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2012, 20:55:33 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
вариант Код: java 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2012, 21:03:21 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
скорей всего так не заработает, напиши как я поправил ниже(укажи конструктор с пакетом) Petro123вариант Код: java 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2012, 22:08:48 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Petro123, хибер помойму не понимает как определить какого класса конструктор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2012, 22:10:08 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Итак. Новые вести с поля боя. Пока не доканая, не успокоюсь. В очередной раз разбираюсь с HQL. Вот очередная загдка. Значит имею такое: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Выполняю и выдает ошибку: авторorg.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.PropertyNotFoundException: Could not find setter for 0 on class com.mycom.urbby.model.AccountCntCom Я подумал, что надо как-то ему указать какие поля в какие сеттеры пихать. Порыл проперти и методы для createQuery и что-то ничего подходящего не нашел. Осталось попробовать так: Код: java 1. И о чудо!..бл*.. Заработало! Ну ведь нихрена не поменялось по сути! Почему? Теперь следующий вопрос. Как заставить работать с таким запросом: Код: java 1. Выдает ошибку: авторorg.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.QueryException: could not resolve property: id_user of: com.mycom.urbby.model.Comment [select ac.id_user as id_user, ac.username as username, (select count(*) from com.mycom.urbby.model.Comment cm where cm.id_user = ac.id_user) as cntCom from com.mycom.urbby.model.Account ac] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2012, 22:13:39 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Может это быть из-за того, что с сучности Comment у меня по сути нет поля id_user, а заместо этого так: Код: java 1. 2. 3. Что тогда делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2012, 22:26:57 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
jabнихрена не поменялось по сути! Почему? поменял - имена полей совпали. Было ac.id_user стало id_user авторКак заставить работать с таким запросом: ищи примеры в сети вместе с Transformer (имена полей нового запроса должны совпасть с ДТО и указать типы полей) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2012, 22:55:00 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Ещё у меня вопрос по критерию. Есть у меня 2 таблички. Ленивая связка между ними. Но я иногда выбираю по полной связке так: Код: java 1. 2. 3. Таким образом получаю лист категорий с заполненным сетом articles. Но яб хотел, чтоб было дополнительное условие. В табличке article.enabled = true. Просто добавить criteria.add(Restrictions.eq("enabled", true)); не канает и не канает criteria.add(Restrictions.eq("articles.enabled", true)); Что надо добавить ещё? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2012, 02:45:46 |
|
||
|
Как получить имя пользователя не используя связку @ManyToOne
|
|||
|---|---|---|---|
|
#18+
Вот я посмотрел, какой запрос генерит хибер: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. подумал немного и в наглую запердолил: Код: java 1. 2. 3. 4. и все заработало. НО! Мне не нравится этот способ. Всегда ли хибер будет именно такой алиас генерить или можно както ему подсказывать какой алиас генерить? Да и нетбинс перечеркивает мне конструкцию Expression.sql Видимо намекая мол не лучший способ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2012, 03:20:02 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2132367]: |
0ms |
get settings: |
21ms |
get forum list: |
20ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
56ms |
get topic data: |
22ms |
get forum data: |
6ms |
get page messages: |
146ms |
get tp. blocked users: |
2ms |
| others: | 445ms |
| total: | 730ms |

| 0 / 0 |
