Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Statement vs Session, или на сколько страшно не использовать H 
V
    Опции темы
LSD
Дата 11.12.2007, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(AlexeyVorotnikov @  11.12.2007,  10:27 Найти цитируемый пост)
У тебя тип самого record_id -- long, а тип аргумента в сеттере -- Long. Поэтому и IllegalArgumentException вылетает. (Скорее всего)

Это смотря как они определяют тип property, если по get/set методам, то это все равно, там просто будет autoboxing на автомате и все.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Platon
Дата 11.12.2007, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



Подведем предварительный итог:
Я понял, как работают Query! и это меня очень радует, понял, что Hibernate как никогда освобождает меня от бремени использования рукописных запросов.

Теперь по делу:
Все-таки не могу добиться результата работы данного запроса :(
Код

public class Test {
    public static void main(String[] args) {
        HibernateUtil.addClass(CarMark.class);
        HibernateUtil.addClass(CarModel.class);
        HibernateUtil.addClass(Car.class);
        HibernateUtil.init();
        Query q = HibernateUtil.getSession().createQuery("SELECT mark.recordId, COUNT( * ) AS amount FROM Car car JOIN car.model model JOIN model.mark mark GROUP BY mark.recordId").setResultTransformer(Transformers.aliasToBean(Mon.class));
        List l = q.list();
    }
}


Код

package platon.yanaidu.test;

import javax.persistence.*;

@Entity
public class Car {
    @Id
    @GeneratedValue
    @Column(name = "record_id")
    public Long recordId;
    @ManyToOne
    @JoinColumn(name = "model_id")
    public CarModel model;
}



Код

package platon.yanaidu.test;

import javax.persistence.*;

@Entity
@Table(name = "car_mark")
public class CarMark {
    @Id
    @GeneratedValue
    @Column(name = "record_id")
    public Long recordId;

    public String name;
}



Код

package platon.yanaidu.test;

import javax.persistence.*;
@Entity
@Table(name = "car_model")
public class CarModel {
    @Id @GeneratedValue @Column(name = "record_id")
    public Long recordId;

    @ManyToOne()
    @JoinColumn(name = "parent_id")
    public CarMark mark;
}



Код

package platon.yanaidu.test;

public class Mon {
    public Long record_id;
    public String name;
    public int amount;

    public Mon() {    }

    public Long getRecord_id() {
        return record_id;
    }

    public void setRecord_id(Long record_id) {
        this.record_id = record_id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAmount() {
        return amount;
    }

    public void setAmount(int amount) {
        this.amount = amount;
    }
}

Генерируется следующий родной запрос:
Код

    select
        carmark2_.record_id as col_0_0_,
        count(*) as col_1_0_ 
    from
        Car car0_ 
    inner join
        car_model carmodel1_ 
            on car0_.model_id=carmodel1_.record_id 
    inner join
        car_mark carmark2_ 
            on carmodel1_.parent_id=carmark2_.record_id 
    group by
        carmark2_.record_id


Вот это я сварганил, но выдается ошибочка:
Цитата

Exception in thread "main" org.hibernate.PropertyNotFoundException: Could not find setter for 0 on class platon.yanaidu.test.Mon
    at org.hibernate.property.ChainedPropertyAccessor.getSetter(ChainedPropertyAccessor.java:44)



Это сообщение отредактировал(а) Platon - 30.12.2007, 21:59
PM MAIL ICQ   Вверх
AlexeyVorotnikov
Дата 11.12.2007, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 18.6.2007
Где: Москва

Репутация: 10
Всего: 18



Код

SELECT mark.recordId AS record_id, COUNT( * ) AS amount FROM Car car JOIN car.model model JOIN model.mark mark GROUP BY mark.recordId



--------------------
RTFM!
Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification
PM MAIL   Вверх
Platon
Дата 12.12.2007, 06:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



Долгожданный ответ!!! Спасибо.

Только подправь recored_id на record_id на случай, если кто-то будет интересоваться темой.
И мне чтоб окончательно заработало надо было поменять setter в Mon
Код

public void setAmount(int amount) {
        this.amount = amount;
    }



на 

Код

public void setAmount(Long amount) {
        this.amount = amount.intValue();
    }

PM MAIL ICQ   Вверх
Platon
Дата 12.12.2007, 07:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



Если уж быть педантично точным, то требуемый запрос был:
Код

SELECT mark.recordId AS record_id, mark.name as name, COUNT( car.recordId ) AS amount FROM Car car JOIN car.model model RIGHT JOIN model.mark mark GROUP BY mark.recordId


PM MAIL ICQ   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0478 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.