powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как получить имя пользователя не используя связку @ManyToOne
25 сообщений из 84, страница 2 из 4
Как получить имя пользователя не используя связку @ManyToOne
    #37693973
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и ещё.
Для FK не надо ничего и никуда выгружать. Структура не меняется.
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37693980
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никчтобы узнать size у коллекции совсем не обязательно тянуть всю коллекцию, причем это в хибернейте с самого начала.
int count = select * from Comments c where c.user.id = : userId


Не понял. Есть public List<Article> и у каждого Article есть private Set<Comment> comments;
Как же узнать сайз Set<Comment> не затянув его?
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37693984
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123ты не ответил, выше код подходит?
Примерно аналогично я и делал, только с LAZY
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37694003
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabНе понял. Есть public List<Article> и у каждого Article есть private Set<Comment> comments;
Как же узнать сайз Set<Comment> не затянув его?
Никто так не делает. У юзеров тысячи коментариев. Никто не затягивает всю коллекцию. Размер получают отдельным COUNT запросом.
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37694006
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabКак же узнать сайз Set<Comment> не затянув его?
насколько в курсе, то код в JSP выполняется в момент рендеринга в респонсе. Т.е. всё что нужно ДОЛЖНО быть загружено. Иначе, сессия хибера будет закрыта и будет исключение.
Приведи кусок кода для "зачем узнать размер коллекции"
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37694022
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
@OneToMany
@org.hibernate.annotations.LazyCollection(
org.hibernate.annotations.LazyCollectionOption.EXTRA
)
private Set<Child> children = new HashSet<Child>();



Parent p = // execute query to load desired parent
// due to lazy loading, at this point p.children is a proxy object
int count = p.getChildren().size(); // the collection is not loaded, only its size
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37694030
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никint count = p.getChildren().size(); // the collection is not loaded, only its size

И правда. Был не прав. AbstractCollectionPersister.generateSelectSizeString(...)
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37694056
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мм.. а теперь как этим способом мне вывести количество коментариев в JSP?
Допустим я имею отдель но табилчку пользователей и отдельно табличку коментариев.
Делаю простую страничку, на которую мне надо вывести всех пользователей с их количеством коментариев.
Например для MySQL:
select user.*, (select count(*) from comment where comment.id_user = user.id_user) as countCom from user

Как в хибере тоже самое сделать? Чтоб при этом не вытягивать колекции сообщений для каждого пользователя в колекции пользователей.
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37694072
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabДелаю простую страничку, на которую мне надо вывести всех пользователей с их количеством коментариев.

Для этой задачи только HQL/SQL. Иначе (если через коллекции), то будет COUNT запрос на каждого юзера.
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37694073
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из этого запроса я могу выдрать модель user и у меня останется ещё параметр countCom, которыхй какбы нужно прикрутить к пользователю както... Мм... не знаю как..
Код: java
1.
2.
3.
4.
5.
6.
7.
    @Override
    @Transactional
    public List<Category> getAllUserCntCom() {
        String sqlQuery = "select user.*, (select count(*) from comment where comment.id_user = user.id_user) as countCom from user";
        Criteria criteria = sessionFactory.getCurrentSession().createCriteria(User.class, sqlQuery);
	return criteria.list();
    }



Как?
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37694085
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это получается что надо делать ещё одну модель User с стандартными параметрами и с параметром countCom? Например назвать модель UserCntCom и в критерию её.
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37694087
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или даже не с стандартными параметрами, а наследник User и с доп параметром.
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37694111
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нузачем сразу новую сущность? Создай простое 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
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37694129
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никСоздай простое DTO.
Как их делают то?
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37694131
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никselect new UserDTO(u, countCom)
Не знаю такую конструкцию. Куда это писать то?
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37694135
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jab
Код: java
1.
        String sqlQuery = "select user.*, (select count(*) from comment where comment.id_user = user.id_user) as countCom from user";



А зачем подзапрос? Почему через group by не сделать?
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37694136
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabНе знаю такую конструкцию. Куда это писать то?
HQL
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37694144
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczА зачем подзапрос? Почему через group by не сделать?
Потому что group by не будет работать с user.*

В общем возвращаясь к DTO.
У меня была мысль сделать класс с двумя пропертями. Первый пропертя это обьект Urer, а второй пропертя это Integer countCom.

Но я не знаю как теперь в него забивать данные из того запроса, что привел. Неужели в цикле обходить? Может както замапить на запрос можно. Поискал... чот не нахожу ничего подходящего.
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37694149
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНе знаю такую конструкцию. Куда это писать то?

DTO - это простой класс, без аннотации Entity, все это делается через hql. Кстати DTO - это еще и паттерн но тут он используется не совсем классически
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37694152
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabПоискал... чот не нахожу ничего подходящего.
Блин это как надо было искать?
Гугл -> Hibernate HQL
Первая же ссылка
http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html
Ctrl+F -> new
14.6. The select clause - куча примеров
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37694155
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabПотому что group by не будет работать с user.*

Можно через join сделать. Ну, это уже оптимизация на будущее, если что.
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37694181
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник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.
public class UserDTO {
    protected User user;
    protected Integer cntCom;


    public Integer getCntCom() {
        return cntCom;
    }

    public void setCntCom(Integer cntCom) {
        this.cntCom = cntCom;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}



Дальше то что писать?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    @Override
    @Transactional
    public List<Article> getAllUserCntCom(Integer FirstR, Integer MaxR) {
        String sqlQuery = "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";
        Query query = sessionFactory.getCurrentSession().createQuery(sqlQuery);
        query.setFirstResult(FirstR);
        query.setMaxResults(MaxR);
                
        return query.list();
    }



Так чтоли?
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37694183
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.. очепятка List<Article>

List<UserDTO>
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37694185
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и? не работает чтоли?
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37694255
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно не работает!

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.
public class UserDTO {
    protected Account account;
    protected Integer cntCom;


    public Integer getCntCom() {
        return cntCom;
    }

    public void setCntCom(Integer cntCom) {
        this.cntCom = cntCom;
    }

    public Account getAccount() {
        return account;
    }

    public void setAccount(Account account) {
        this.account = account;
    }
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    @Override
    @Transactional
    public List<UserDTO> getAllUserCntCom(Integer FirstR, Integer MaxR) {
        String sqlQuery = "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";
        Query query = sessionFactory.getCurrentSession().createQuery(sqlQuery);
        query.setFirstResult(FirstR);
        query.setMaxResults(MaxR);
                
        return query.list();
    }



И вызываю: List <UserDTO> userDTO = accountDao.getAllUserCntCom(1, 5);
ошибка.
...
Рейтинг: 0 / 0
25 сообщений из 84, страница 2 из 4
Форумы / Java [игнор отключен] [закрыт для гостей] / Как получить имя пользователя не используя связку @ManyToOne
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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