2013-11-27 69 views
0

当我试图完成选择与Hibernate休眠,抛出此异常:查询与注释

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具有相同的名称

明显看跌getter和setter方法,我的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的声明的注释实体。 如果您使用的是spring,那么在sessionFactory Bean中指定以下内容。它也可以是.cfg文件。

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

是,也是在HQL它必须是“从Formato F” – Zeus

+0

是的,你是对的,但我发现我没有写每个对象更好的解决方案: <属性名=“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,你应该使用映射@Entity,而不是实际的表名和列名的Java类名和属性名,所以HQL应该是:

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