首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带注释的hibernate中的查询

带注释的hibernate中的查询
EN

Stack Overflow用户
提问于 2013-11-28 02:45:44
回答 2查看 162关注 0票数 0

当我尝试用hibernate完成select时,抛出了这个异常:

代码语言:javascript
复制
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)

我检查了我的对象注释,并认为它是好的,这是代码:

代码语言:javascript
复制
@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中,属性具有相同的名称

显然放了getter和setter,还有我的DAO:

代码语言:javascript
复制
@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中

代码语言:javascript
复制
@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";

    }
EN

回答 2

Stack Overflow用户

发布于 2013-11-28 03:13:15

在HQL中,您应该使用映射的@Entity的java类名和属性名,而不是实际的表名和列名,因此HQL应该是:

代码语言:javascript
复制
List<Formato> formatos = (List<Formato>)session.createQuery("from Formato").list();
票数 2
EN

Stack Overflow用户

发布于 2013-11-28 03:11:44

如果您没有在SessionFactory中声明带注释的实体,则会得到该异常。如果您使用的是spring,那么在sessionFactory Bean中指定以下内容。它也可能是.cfg文件。

代码语言:javascript
复制
<property name="annotatedClasses">
         <list>
 <value>com.somefolder.Formato</value>
</list>
</property>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20250555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档