powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как получить имя пользователя не используя связку @ManyToOne
25 сообщений из 84, страница 1 из 4
Как получить имя пользователя не используя связку @ManyToOne
    #37693701
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допустим у меня есть таблица пользователей и таблица коментариев их.
Нужно связать их один к многим и многие к одному соответственно.
В таблице коментариев напишу:
Код: java
1.
2.
3.
    @ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.LAZY)
        @JoinColumn(name = "id_user")
        private Account account;



Всё какбы понятно и просто. Далее напишу метод, который вернет мне Lист с коментариями пользователей и собсно самих пользователей.. criteria.setFetchMode("account", FetchMode.JOIN); и всё такое. Передам этот Lист в JSP и там получу имя пользователя напротив каждого коментария.

А можно как-то ещё получить имя пользователя в JSP если не использовать @ManyToOne, а просто в таблице коментариев сделать поле id_user? Ну может примерчик какой есть с учетом, что TomCat 6 и нельзя там вызывать методы. Как выкрутится? Подскажите пожалуйста.
Получается в JSP передам Lист коментариев и у каждого элемента будет свойство id_user. Т.е. айдиху пользователя только получу, а как по ней имя тамже получить?
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37693715
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А цель какая? Не нравится JOIN? Догрузи отдельным запросом.
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37693717
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabА можно как-то ещё получить имя пользователя в JSP если не использовать @ManyToOne, а просто в таблице коментариев сделать поле id_user?
ты его и сделал, указав аннотацию хиберу.
Насчёт 6-ки не в курсе такого изврата, но ставь 7-ку.
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37693760
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczА цель какая? Не нравится JOIN? Догрузи отдельным запросом.
Как отдельным запросом грузить? Нужно в самом JSP передать какойто обьект, который по id_user будет возвращать его имя? Но получается что методы не выполнить в шестерке. Как это делать?

Petro123Насчёт 6-ки не в курсе такого изврата, но ставь 7-ку.
Не могу ничего ставить там. Что есть, с тем и приходится выкручиваться.
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37693766
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jab,
в хибере afaik есть вычисляемое псевдо поле"
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37693774
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabКак отдельным запросом грузить?

FetchMode.SELECT

jabНужно в самом JSP передать какойто обьект, который по id_user будет возвращать его имя?

Почему именно в JSP? Это самоцель какая-то? Или что? Почему не выбрать автора сразу?

jabНо получается что методы не выполнить в шестерке. Как это делать?

Какие методы?? О чем речь? При чем здесь вообще Tomcat? Свойства из EL отлично вызываются.
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37693787
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В чем проблема использовать @ManyToOne ?
Если хочется отказатся от ORM в пользу более "насыщенной" модели, то делаешь свойство
getAuthor(), которое по id через репозиторий вытягивает объект. Посмотри паттерн Repository у Фаулера.
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37693803
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема какая-то надуманная
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37693814
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никПроблема какая-то надуманная
дак ему никто пример не привёл.
12192686
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37693848
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczПочему именно в JSP? Это самоцель какая-то? Или что? Почему не выбрать автора сразу?
А как сразу то? Должна быть колекция сообщений у которых должно быть свойство обьект пользователь (private Account account;), а не просто его id_user. Ну или хотябы свойство имя пользователя или тот параметр, который мне нужен. Это мне заранее надо както в моделе сообщений прописывать или делать ещё одну модель сообщений с этим свойством спецально заточенную под это дело?
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37693852
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так. По порядку.

jabВсё какбы понятно и просто. Далее напишу метод, который вернет мне Lист с коментариями пользователей и собсно самих пользователей.. criteria.setFetchMode("account", FetchMode.JOIN); и всё такое. Передам этот Lист в JSP и там получу имя пользователя напротив каждого коментария.
Что не так в этой модели? Почему хочется сделать иначе?:
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37693863
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabДолжна быть колекция сообщений у которых должно быть свойство обьект пользователь (private Account account;), а не просто его id_user.
Если использовать прокси, то так и будет. С той лишь разницей что id будет не в comment.id_user, а в comment.user.id.
Какая разница где он находится? На что это влияет?
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37693876
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczЧто не так в этой модели? Почему хочется сделать иначе?
С этой моделью всё хорошо и всё в порядке. Именно так я делал раньше. А сейчас вот получилось так, что у меня нет этой связки, а есть просто колумн id_user. Вот по этому и хотел узнать, как можно добраться до имени пользователя, не переделывая модель под много к одному. Т.е. может есть простой способ добраться, про который я не знаю. Хотел расширить кругозор.
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37693879
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jab,
я читал такие подходы:
- действительно, view модель не соответствует модели хибера, поэтому перед отдачей в респонс её доводят черед DTO\VO\JOIN
Но мне это не нравится, т.к. я ленивый программист.
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37693886
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabА сейчас вот получилось так, что у меня нет этой связки, а есть просто колумн id_user.
А куда она делась?

jabВот по этому и хотел узнать, как можно добраться до имени пользователя, не переделывая модель под много к одному. Т.е. может есть простой способ добраться, про который я не знаю. Хотел расширить кругозор.
Можно добавить транзиентное поле в коментарии. И после загрузки проставить автора. Желательно всё это делать до JSP. Тогда и вопросов как тот или иной метод вызывать из JSP не будет.
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37693887
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на хабре обсуждалось, нужны ли id на клиенте и как их заменять на имена или развёрнутые связки.
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37693893
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так вот, насчет лени. У меня сейчас есть:
Код: java
1.
2.
    @Column(name="id_user", nullable=true)
	private Long id_user;



А нужно переделать на:
Код: java
1.
2.
3.
    @ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.LAZY)
        @JoinColumn(name = "id_user")
        private Account account;



Соответственно в табличке с комментами нужно добавить FK на акаунт, ну или выгрузить все данные, перекриэйтить таблички хибером всё заново и загрузить данные поверх в пустые новые таблички. Как-то много действий надо делать.
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37693911
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jab,
приведи структуру таблиц в БД реальную "сейчас есть".
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37693914
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя может и правда, имеет смысл делать облегченные модельки. И грузить в них только нужное .createSQLQuery(query).list(); из запроса. Потом эту модельку отдавать в JSP. Там обращаться к свойствам. Всё получается просто и понятно и минимум памяти отнимет на неиспользуемое. Только получится ухожу от FK в БД. Целостность придется как-то вручную поддерживать.
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37693922
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabЦелостность придется как-то вручную поддерживать.
плохо. Лучше переделать. Приведи схемку.
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37693935
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот минимум что нужно (если угадал)
Код: 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.
public class Book {
	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "id_book", targetEntity = Comment.class)
	private List<Comment> comments;
	
public class Comment {
  @ManyToOne()
  private Book id_book;
----------------------------
create table Book (
        id  bigserial not null,
        Name varchar(255) not null,
        primary key (id)
    )

    create table Comment (
        id  bigserial not null,
        MyName varchar(255) not null,
        id_book_id int8,
        primary key (id)
    )

    alter table Comment 
        add constraint FK9BDE863FC891AF2 
        foreign key (id_book_id) 
        references Book
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37693946
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123приведи структуру таблиц в БД реальную "сейчас есть".
Задолбаюсь тут приводить структуры.. там много чего надо приводить и разбираться потом в этом никому не захочется.

Petro123
Смотри! Попробую на словах обьяснить. Идея такая. Есть у меня пользователи и есть у пользователей публикации. Пользователей может быть много и у каждого пользователя может быть много публикаций. Публикация из себя представляет обложку, наименование, некоторое описание, текст публикации, к каким категориям относится, ну и ещё некоторые параметры. Мне нужно получить мои публикации, при этом я должен видять только обложку, наименование, описание, к каким категориям относится, дату создания, количество коментариев. Собсно почти все за исключением массивного поля текста публикации. И вот ещё важный момент. Мне нужно получить количество коментариев, а не колекцию этих коментариев. Так бы я через связки получил колекцию и узна size(), но нахрена козе баян? Нахрена лишние обьекты ради сайза? Нахрена мне текст публикации, если его я не должен видять в списке моих публикаций, а он порядком места будет занимать до 200 000 символов. Так вот тянуть весь этот обьем из БД в память как бы не рационально и не оправдывает это простоту написания кода. Надо чтото усложнить в коде, но меньше грузить память и БД. Вот и думаю делать простые модельки для каждого случая, но не замапленные на таблички. В них выбирать запросом нужное. Как такая мысль?
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37693963
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чтобы узнать size у коллекции совсем не обязательно тянуть всю коллекцию, причем это в хибернейте с самого начала.
int count = select * from Comments c where c.user.id = : userId
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37693964
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz А куда она делась?
Не делось, просто новый проект. Так вот почемуто сразу не сделал, а теперь вот что есть, то есть.
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37693970
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabКак такая мысль?
ты не ответил, выше код подходит?
Учти одни непреложные правила:
- первична доменная модель и идти надо не от view а от текста-КОДА что я привёл выше.
- именно для этого модель в БД нормализуют ДЛЯ бд, а не для удобства в JSP
- чтобы не грузить, есть LAZY
??
...
Рейтинг: 0 / 0
25 сообщений из 84, страница 1 из 4
Форумы / Java [игнор отключен] [закрыт для гостей] / Как получить имя пользователя не используя связку @ManyToOne
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]