Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Помогите с Hibernate / 7 сообщений из 7, страница 1 из 1
15.10.2013, 14:12:13
    #38428196
Витяй1991
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с Hibernate
Стал изучать Hibernate, пишу простейшую программу на добавление и выборку записей:

Главный класс:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
package example;
public class Example {
    public static void main(String[] args) {
        Horse horse = new Horse();
        horse.setBreed("red");
        horse.setHorseId(14);
        HorseDAO h = new HorseDAOImpl();
        h.add(horse);
        
        List<Horse> horses = h.getAllHorses();
        for(Horse hor : horses){
            System.out.println(hor.getBreed());
        }     
    }
}



Класс Horse:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
package modelo;
public class Horse implements Serializable {
    private int horseId;
    private String breed;

    public Horse() {
    }
    public Horse(int horseId, String breed) {
        this.horseId = horseId;
        this.breed = breed;
    }
    public int getHorseId() { return this.horseId;}
    public void setHorseId (int horseId) { this.horseId = horseId; }
    public String getBreed() { return this.breed; }
    public void setBreed(String breed) {this.breed = breed; }    
}



hibernate.cfg:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/ippodrom</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">root</property>
    <property name="hibernate.current_session_context_class">thread</property>
    <mapping resource="modelo/Horse.hbm.xml"/>
  </session-factory>
</hibernate-configuration>



hibernate.reveng:
Код: xml
1.
2.
3.
4.
5.
6.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-reverse-engineering PUBLIC "-//Hibernate/Hibernate Reverse Engineering DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd">
<hibernate-reverse-engineering>
  <schema-selection match-catalog="ippodrom"/>
  <table-filter match-name="horse"/>
</hibernate-reverse-engineering>



Horse.hbm:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 13.10.2013 20:57:34 by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
    <class name="modelo.Horse" table="horse" catalog="ippodrom">
        <id name="horseId" type="int">
            <column name="horse_id" />
            <generator class="assigned" />
        </id>
        <property name="breed" type="string">
            <column name="breed" length="10" />
        </property>
    </class>
</hibernate-mapping>



класс HorseDAOImpl:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
package example;
public class HorseDAOImpl implements HorseDAO {

    Session session = HibernateUtil.getSession();

    @Override
    public void add(Horse horse) {
        session.beginTransaction();
        session.save(horse);
        session.getTransaction().commit();
    }
    public List<Horse> getAllHorses() {
        session.beginTransaction();
        Query q = session.createSQLQuery("select * from horse");
        session.getTransaction().commit();
        return (List<Horse>) q.list();
    }
}



Записи добавляет нормально, а при попытке вывести все записи на экран выдает ошибку:
ошибкаException in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to modelo.Horse
at example.Example.main(Example.java:19) --- ругается на эту строку
Код: java
1.
for(Horse hor : horses){


в таблице два поля - horse_id и breed
...
Рейтинг: 0 / 0
15.10.2013, 14:21:07
    #38428225
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с Hibernate
Нужно использовать HQL запросы, а не SQL.
При запуске SQL хибер не знает что там вернет ваш произольный запрос, поэтому не может так просто собрать из результатов запроса объекты.
Вместо createSQLQuery используйте createQuery
...
Рейтинг: 0 / 0
15.10.2013, 14:35:28
    #38428262
Витяй1991
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с Hibernate
Blazkowicz,

сделал так:
Код: java
1.
Query q = session.createQuery("from horse");



теперь выбрасывает исключение:
Exception in thread "main" org.hibernate.hql.ast.QuerySyntaxException: horse is not mapped [from horse]
at org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:158)
at org.hibernate.hql.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:87)
at org.hibernate.hql.ast.tree.FromClause.addFromElement(FromClause.java:70)
at org.hibernate.hql.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:255)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3056)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:2945)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:688)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:544)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:228)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:160)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623)
at example.HorseDAOImpl.getAllHorses(HorseDAOImpl.java:22)
at example.Example.main(Example.java:18)
Java Result: 1
хотя в <hibernate-mapping> таблица указана
...
Рейтинг: 0 / 0
15.10.2013, 14:38:18
    #38428271
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с Hibernate
Потому что в HQL используется имя сущности, а не таблицы.
Так как entity-name у вас в маппинге не указан, то имя сущности, вероятно modelo.Horse.
...
Рейтинг: 0 / 0
15.10.2013, 15:37:18
    #38428376
Витяй1991
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с Hibernate
Blazkowicz,

сделал так:
Код: 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.
@Entity
@Table(name = "horse", catalog = "modelo")
public class Horse implements Serializable {

    private int horseId;
    private String breed;

    public Horse() {
    }
    public Horse(int horseId) {
        this.horseId = horseId;
    }   
    public Horse(String breed) {
        this.breed = breed;
    }
    public Horse(int horseId, String breed) {
        this.horseId = horseId;
        this.breed = breed;
    }
    @Id
    @Column(name = "horse_id", unique = true)
    public int getHorseId() {
        return this.horseId;
    }
    public void setHorseId(int horseId) {
        this.horseId = horseId;
    }
    @Column(name = "breed", length = 10)
    public String getBreed() {
        return this.breed;
    }
    public void setBreed(String breed) {
        this.breed = breed;
    }
}


всё равно та же ошибка((
...
Рейтинг: 0 / 0
15.10.2013, 15:42:12
    #38428387
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с Hibernate
Horse.hbm удалили?
...
Рейтинг: 0 / 0
15.10.2013, 15:53:28
    #38428414
Витяй1991
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с Hibernate
Blazkowicz,

всё, разобрался!
работает и без аннотаций в классе Horse, но оказывается нужно было писать
Код: java
1.
Query q = session.createQuery("from Horse");


а не:
Код: java
1.
Query q = session.createQuery("from horse");


теперь всё работает)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Помогите с Hibernate / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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