Исключение в потоке "main" org.hibernate.MappingException: неизвестная сущность: из пункта назначения - PullRequest
1 голос
/ 26 января 2012

Я изучаю спящий режим и не могу понять, почему появляется эта ошибка. Я попытался найти, но не смог найти решение, которое мне помогло. Я хотел бы узнать, почему я получаю эту ошибку.

Exception in thread "main" org.hibernate.MappingException: Unknown entity: from Destination

Вот некоторые детали:

main():

    public static void main(String[] args) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();

//      Destination destination = new Destination();
//      destination.setName("IDelhi");
//      destination.setLatitude(1.0f);
//      destination.setLongitude(123.0f);
//      session.save(destination);

        List result = session.createCriteria("from Destination").list();

        session.getTransaction().commit();

        session.close();

//      for (Object dest : result) {
//          Destination d = (Destination)dest;
//          System.out.println(d.getId() + ": "+ d.getName());
//      }
    }
}

Когда я пытаюсь вставить пункт назначения (закомментированный код), значения добавляются в БД.

Конфигурация:

hibernate.cfg.xml:

<?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 name="">
  <property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
  <property name="hibernate.connection.password">*****</property>
  <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/</property>
  <property name="hibernate.connection.username">*****</property>
  <property name="hibernate.default_schema">wah_schema</property>
  <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
  <!-- Echo all executed SQL to stdout -->
  <property name="show_sql">true</property>
  <!-- Enable Hibernate's automatic session context management -->
  <property name="current_session_context_class">thread</property>
  <mapping class="org.wah.dao.Destination" resource="org/wah/dao/Destination.hbm.xml"/>
 </session-factory>
</hibernate-configuration>

Destination.hbm.xml:

<?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 Jan 25, 2012 3:31:00 PM by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
 <class name="org.wah.dao.Destination" table="DESTINATION">
  <id name="id" type="int">
   <column name="ID"/>
   <generator class="identity"/>
  </id>
  <property generated="never" lazy="false" name="name" type="java.lang.String">
   <column name="NAME"/>
  </property>
  <property generated="never" lazy="false" name="latitude" type="float">
   <column name="LATITUDE"/>
  </property>
  <property generated="never" lazy="false" name="longitude" type="float">
   <column name="LONGITUDE"/>
  </property>
 </class>
</hibernate-mapping>

Может кто-нибудь помочь мне разобраться?

Ответы [ 5 ]

3 голосов
/ 26 января 2012

использовать session.createCriteria(Destination.class); Вы пытаетесь использовать HQL - Hibernate Query Language , для которого вам нужно использовать другие API, такие как

Query query = session.createQuery("from Destination");
List list = query.list();
2 голосов
/ 28 октября 2012
<mapping class="org.wah.dao.Destination"
     resource="org/wah/dao/Destination.hbm.xml"/>

вместо этого, пожалуйста, измените его на

<mapping resource="org/wah/dao/Destination.hbm.xml">

Hibernate выдает эту ошибку, потому что, когда она ожидает некоторый класс на основе аннотаций, вы ссылаетесь на отображение Hibernate на основе XML. Придерживайтесь двух разных правил или аннотаций на основе XML.

1 голос
/ 26 января 2012

Вы смешиваете запрос HQL и Критерии. Вы должны либо сделать

session.createCriteria(Destination.class).list();

или

session.createQuery("from Destination").list();
0 голосов
/ 20 августа 2014

У меня была похожая проблема для простого консольного приложения, пытающегося использовать Hibernate.Решение, которое я прибыл, чтобы добавить свойство «packagesToScan» явно для LocalSessionFactoryBean.

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
   <property name="dataSource" ref="dataSource"/>
   <property name="packagesToScan" value="com.mg.learning.spring.orm"/> <--- this SOLVED!
   <property name="hibernateProperties">
    <props>
        <prop key="dialect">org.hibernate.dialect.MySQL5Dialect</prop>
        <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
    </props>
   </property>
</bean>
0 голосов
/ 26 января 2012

Согласно здесь , что-то вроде этого должно работать:

List result = session.createCriteria(Destination.class).list();

...