powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как получить имя пользователя не используя связку @ManyToOne
9 сообщений из 84, страница 4 из 4
Как получить имя пользователя не используя связку @ManyToOne
    #37695904
GregTk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jab, еще в запросе укажи имя конструктора с пакетом.
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37695910
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вариант
Код: java
1.
2.
3.
4.
5.
6.
	public List<KillStat> findTopKillers(int firstResult, int maxResults) {
		Query query = sessionFactory.getSession().createQuery("select new KillStat(sum(k.killCount), k.killer) from KillEntry k group by k.killer order by sum(k.killCount) desc, k.killer.id desc");
		query.setFirstResult(firstResult);
		query.setMaxResults(maxResults);
		return query.list();
	}
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37695978
GregTk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скорей всего так не заработает, напиши как я поправил ниже(укажи конструктор с пакетом)
Petro123вариант
Код: java
1.
2.
3.
4.
5.
6.
	public List<KillStat> findTopKillers(int firstResult, int maxResults) {
		Query query = sessionFactory.getSession().createQuery("select new com.example.dto.KillStat(sum(k.killCount), k.killer) from KillEntry k group by k.killer order by sum(k.killCount) desc, k.killer.id desc");
		query.setFirstResult(firstResult);
		query.setMaxResults(maxResults);
		return query.list();
	}
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37695980
GregTk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

хибер помойму не понимает как определить какого класса конструктор
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37695981
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итак. Новые вести с поля боя. Пока не доканая, не успокоюсь. В очередной раз разбираюсь с 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.
public class AccountCntCom {
    private Long id_user;
    private String username;
    protected Long cntCom;

    public AccountCntCom() { }
    
    public AccountCntCom(Long id_user, String username, Long cntCom) {
        this.id_user = id_user;
        this.username = username;
        this.cntCom = cntCom;
    }
    
    public Long getId_user() {
        return id_user;
    }

    public void setId_user(Long id_user) {
        this.id_user = id_user;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
    
    public Long getCntCom() {
        return cntCom;
    }

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



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    @Override
    @Transactional
    public List<AccountCntCom> getAllUserCntCom(Integer FirstR, Integer MaxR) {

        String sqlQuery = "select ac.id_user, ac.username from Account ac";
        
        List list = sessionFactory.getCurrentSession().createQuery(sqlQuery)
            .setResultTransformer( Transformers.aliasToBean(AccountCntCom.class))
            .list();

        return list; 
    }



Выполняю и выдает ошибку:
автор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.
String sqlQuery = "select ac.id_user as id_user, ac.username as username from Account ac";


И о чудо!..бл*.. Заработало! Ну ведь нихрена не поменялось по сути! Почему?

Теперь следующий вопрос. Как заставить работать с таким запросом:
Код: java
1.
String sqlQuery = "select ac.id_user as id_user, ac.username as username, (select count(*) from Comment cm where cm.id_user = ac.id_user) as cntCom from Account ac";


Выдает ошибку:
автор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]
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37695995
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может это быть из-за того, что с сучности Comment у меня по сути нет поля id_user, а заместо этого так:
Код: java
1.
2.
3.
    @ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.LAZY)
        @JoinColumn(name = "id_user")
        private Account account;



Что тогда делать?
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37696020
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabнихрена не поменялось по сути! Почему?
поменял - имена полей совпали. Было ac.id_user стало id_user
авторКак заставить работать с таким запросом:
ищи примеры в сети вместе с Transformer
(имена полей нового запроса должны совпасть с ДТО и указать типы полей)
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37697529
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё у меня вопрос по критерию.
Есть у меня 2 таблички. Ленивая связка между ними. Но я иногда выбираю по полной связке так:
Код: java
1.
2.
3.
        Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Category.class);
        criteria.add(Restrictions.eq("id_categ", id_categ));
        criteria.setFetchMode("articles", FetchMode.JOIN);



Таким образом получаю лист категорий с заполненным сетом articles. Но яб хотел, чтоб было дополнительное условие. В табличке article.enabled = true.
Просто добавить criteria.add(Restrictions.eq("enabled", true)); не канает и не канает criteria.add(Restrictions.eq("articles.enabled", true));
Что надо добавить ещё?
...
Рейтинг: 0 / 0
Как получить имя пользователя не используя связку @ManyToOne
    #37697535
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот я посмотрел, какой запрос генерит хибер:
Код: 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.
    select
        this_.id_categ as id1_3_1_,
        this_.catName as catName3_1_,
        this_.catTitle as catTitle3_1_,
        this_.id_par as id4_3_1_,
        articles2_.id_categ as id2_3_,
        article3_.id_article as id1_3_,
        article3_.id_article as id1_2_0_,
        article3_.artAutor as artAutor2_0_,
        article3_.artDescription as artDescr3_2_0_,
        article3_.artName as artName2_0_,
        article3_.artReyting as artReyting2_0_,
        article3_.artText as artText2_0_,
        article3_.artViews as artViews2_0_,
        article3_.coverPath as coverPath2_0_,
        article3_.dateUpload as dateUpload2_0_,
        article3_.enabled as enabled2_0_,
        article3_.id_user as id11_2_0_ 
    from
        category this_ 
    left outer join
        art_categ articles2_ 
            on this_.id_categ=articles2_.id_categ 
    left outer join
        article article3_ 
            on articles2_.id_article=article3_.id_article 
    where
        this_.id_categ=?


подумал немного и в наглую запердолил:
Код: java
1.
2.
3.
4.
        Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Category.class);
        criteria.add(Restrictions.eq("id_categ", id_categ));
        criteria.setFetchMode("articles", FetchMode.JOIN);
        criteria.add( Expression.sql("article3_.enabled = 1"));


и все заработало. НО! Мне не нравится этот способ. Всегда ли хибер будет именно такой алиас генерить или можно както ему подсказывать какой алиас генерить? Да и нетбинс перечеркивает мне конструкцию Expression.sql Видимо намекая мол не лучший способ.
...
Рейтинг: 0 / 0
9 сообщений из 84, страница 4 из 4
Форумы / Java [игнор отключен] [закрыт для гостей] / Как получить имя пользователя не используя связку @ManyToOne
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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