2013-11-27 6 views
0

при попытке выполнить выбор с спящим режимом, брошенное это исключение:запроса в спящем режиме с аннотациями

org.hibernate.hql.internal.ast.QuerySyntaxException: formato is not mapped [from formato] 
    at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:180) 
    at org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:110) 
    at org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:93) 
    at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:324) 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3420) 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3309) 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:706) 
    at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:562) 

я просматриваю объекты аннотации и думаю, что его хорошо, это код:

@Entity 
@Table(name="formato") 
public class Formato implements Serializable{ 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 5849413670083213438L; 
    @Id 
    @Column(name="id") 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private int id; 
    @Column(name="formato") 
    private String formato; 
    @Column(name="tipoItem") 
    private int tipoItem; 

в BD в atributtes имеют такое же имя,

явно поставленные добытчиками и сеттеров, и мой DAO:

@Transactional 
    public List<Formato> findAllFormatos() { 
     Transaction tx = null; 
     session = sessionFactory.getCurrentSession(); 
     try { 
      tx = session.beginTransaction(); 
      List formatos = session.createQuery("from formato").list(); 
      System.out.println("Pase :'D"); 
      tx.commit(); 
      return formatos; 

     } catch (Exception e) { 
      // TODO: handle exception 
      if (tx != null) tx.rollback(); 
      e.printStackTrace(); 
      return null; 
     } 


    } 

наконец контроллер, но я думаю, что проблема заключается в DAO

@RequestMapping(value = "timbre", method = RequestMethod.GET) 
    public String redirigir(@RequestParam("id") int id, Model model) { 

     Timbre t = null; 
     if (id == 1){ 
      t = new Timbre(); 
      model.addAttribute("t", t); 

      List<Formato> formatos= timbreDAO.findAllFormatos(); 
      model.addAttribute("formatos", formatos); 


      return "formTimbre"; 

     } 
     else if (id == 2) 
      return "modificarTimbre"; 
     else if (id == 3) 
      return "eliminarTimbre"; 
     else if (id == 4) 
      return "buscarTimbre"; 
     else 
      return "timbre"; 

    } 

ответ

0

Вы получаете это исключение, если вы не имеете аннотированный объект, объявленный в SessionFactory. Если вы используете весну, то в sessionFactory Bean укажите следующее. Это может быть также файл .cfg.

<property name="annotatedClasses"> 
     <list> 
<value>com.somefolder.Formato</value> 
</list> 
</property> 
+0

Да, также в HQL он должен быть «от Formato е» – Zeus

+0

да, вы правы, но я нашел, что я лучшее решение без записи каждого объекта: <свойство Name = «packagesToScan»> \t \t \t \t \t \t \t com.mufi.objeto \t \t \t \t \t но теперь бросил это исключение: Ошибка создания боб с именем 'mySessionFactory', определенный в ServletContext ресурс [/WEB-INF/servlet-context.xml ]: Ошибка вызова метода init; Вложенное исключение - org.hibernate.MappingException: постоянный класс неизвестен: int – vrvictor

+0

вам, возможно, придется использовать Integer вместо int в файле сопоставления – Zeus

2

В HQL, вы должны использовать имя класса Java и имя свойства преобразованного @Entity вместо фактического имени таблицы и столбца, поэтому HQL должно быть:

List<Formato> formatos = (List<Formato>)session.createQuery("from Formato").list();