0

我只想从表中返回一列。这是我的 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]
4

3 回答 3

1

您的 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

于 2013-08-08T14:40:22.770 回答
0

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

于 2013-08-08T13:52:00.567 回答
0

正如您添加的那样select,然后list在您的Query. 如果您只想获得第一个结果,则从列表中获得第一个结果。

于 2013-08-08T14:42:02.177 回答