powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Помогите с Hibernate
7 сообщений из 7, страница 1 из 1
Помогите с Hibernate
    #38428196
Витяй1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стал изучать 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
Помогите с Hibernate
    #38428225
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно использовать HQL запросы, а не SQL.
При запуске SQL хибер не знает что там вернет ваш произольный запрос, поэтому не может так просто собрать из результатов запроса объекты.
Вместо createSQLQuery используйте createQuery
...
Рейтинг: 0 / 0
Помогите с Hibernate
    #38428262
Витяй1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Помогите с Hibernate
    #38428271
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что в HQL используется имя сущности, а не таблицы.
Так как entity-name у вас в маппинге не указан, то имя сущности, вероятно modelo.Horse.
...
Рейтинг: 0 / 0
Помогите с Hibernate
    #38428376
Витяй1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Помогите с Hibernate
    #38428387
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Horse.hbm удалили?
...
Рейтинг: 0 / 0
Помогите с Hibernate
    #38428414
Витяй1991
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

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


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


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


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