如何在Hibernate中只返回一列?

时间:2013-08-08 13:43:19

标签: sql spring hibernate

我想从表中只返回一列。这是我的DAO:

@SuppressWarnings("unchecked")
    public String getUri() {

        return sessionFactory.getCurrentSession()
                .createQuery("uri from Templates WHERE state=1").toString();
    }

Uri是一个专栏。 域:

    public String getUri() {
        return uri;
    }

    public void setUri(String uri) {
        this.uri = uri;
    }

控制台说:

 Request processing failed; nested exception is java.lang.IllegalArgumentException: node to traverse cannot be null!

第二个版本:

@SuppressWarnings("unchecked")
    public String getUri() {

        return (String) sessionFactory.getCurrentSession()
                .createQuery("select uri from TEMPLATES WHERE state=1")
                .uniqueResult();
    }

控制台:

Request processing failed; nested exception is org.hibernate.hql.ast.QuerySyntaxException: TEMPLATES is not mapped [select uri from TEMPLATES WHERE state=1]

3 个答案:

答案 0 :(得分:2)

缺少您的SELECT子句:

@SuppressWarnings("unchecked")
    public String getUri() {

        Query q = sessionFactory.getCurrentSession()
                .createQuery("SELECT uri FROM Templates WHERE state=1");

        List l = q.list();

        //guess you know there's only one result?
        return l.get(0).toString();
    }

更多信息:https://forum.hibernate.org/viewtopic.php?p=2448422

答案 1 :(得分:0)

您需要使用类/字段名称,而不是表/列名称。此外,查询不会返回该表的类实例列表,而是返回一个数组。另外,在查询中添加select。我相信异常意味着你的hql坏了。

答案 2 :(得分:0)

当您添加select时,请在list上调用Query方法。如果您只想获得第一个结果,请从列表中获取第一个结果。