2015-12-02 4 views
0

У меня есть ниже сущности класс:ошибка Mapping извлечения данных из БД с помощью Hibernate

@Entity 
@Table(name="TB_CUSTOMER") 
public class Customer 
{ 
.... 

У меня есть следующий hibernate.cfg.xml:

<?xml version='1.0' encoding='utf-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC 
     "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 

<hibernate-configuration> 
    <session-factory> 
     <!-- Database connection settings --> 
     <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> 
     <property name="connection.url">jdbc:oracle:thin:@**:**:**</property> 
     <property name="connection.username">***</property> 
     <property name="connection.password">***</property> 
     <property name="hibernate.connection.pool_size">20</property> 
     <property name="hibernate.hbm2ddl.auto">update</property> 

     <!-- SQL dialect --> 
     <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property> 

     <!-- Echo all executed SQL to log --> 
     <property name="show_sql">false</property> 

     <mapping class="the.path.of.entity.class.Customer"/> 

    </session-factory> 
</hibernate-configuration> 

В моей основной я делаю следующее:

customerDao.openCurrentSession(); 
List<Customer> customers = customerDao.findAll(); 
customerDao.closeCurrentSession(); 

где класс дао является:

public class CustomerDao 
{ 
    Session currentSession; 

    public List<Customer> findAll() 
    { 
     Query query = this.getCurrentSession().createQuery("from Customer"); 
     List<Customer> customers = query.list(); 
     return customers; 
    } 

    protected Session getCurrentSession(){ 
     if(this.currentSession == null){ 
      this.currentSession = getSessionFactory().getCurrentSession(); 
     } 
     return this.currentSession; 
    } 

    public Session openCurrentSession() 
    { 
     currentSession = getSessionFactory().openSession(); 
     return currentSession; 
    } 

    public void closeCurrentSession() 
    {  
     if(currentSession != null) 
     { 
      currentSession.close(); 
     } 
    } 

    private static SessionFactory getSessionFactory() { 
     try { 
      Configuration configuration = new Configuration(); 
      configuration.configure(); 
      return configuration 
        .buildSessionFactory(new StandardServiceRegistryBuilder() 
          .applySettings(configuration.getProperties()) 
          .build()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      throw new RuntimeException(
        "There was an error building the factory"); 
     } 
    }  
} 

, когда я это запущенный Я получаю сообщение об ошибке:

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Customer is not mapped 
    at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:171) 
    at org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:91) 
    at org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:76) 
    at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:321) 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3678) 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3567) 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:708) 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:564) 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:301) 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:249) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:262) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:190) 

если изменить метод FindAll сделать:

List<Customer> customers = (List<Customer>)this.getCurrentSession().createCriteria(Customer.class).list(); 
return customers; 

тогда я просто получаю пустой список ,

Возможно, кто-то поможет в этом?

Возможно, сессия повреждена.

спасибо.

+0

Я попытался заменить имя таблицы в аннотации @name на Cusomer, чтобы имена были одинаковыми, и это не сработало. Таблица DB выглядит нормально. – user3132197

ответ

0

Изменение в главном как:

customerDao.openCurrentSession().beginTransaction(); 
List<Customer> customers = customerDao.findAll(); 
customerDao.closeCurrentSession(); 

И использовать либо один из них:

List<Customer> customers =this.getCurrentSession().createCriteria(Customer.class).list(); 

или

Query query = this.getCurrentSession().createQuery("from Customer C"); 

Также проверить информацию отображения и добавьте полное имя Класс клиента при сопоставлении. as:

<mapping class="package_name.Customer"/> 
+0

Относительно: Запрос запроса = this.getCurrentSession(). CreateQuery («от клиента C»); Я по-прежнему получаю исключение «Клиент не сопоставлен» с этим изменением. – user3132197

 Смежные вопросы

  • Нет связанных вопросов^_^