我想从表中只返回一列。这是我的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]
答案 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();
}
答案 1 :(得分:0)
您需要使用类/字段名称,而不是表/列名称。此外,查询不会返回该表的类实例列表,而是返回一个数组。另外,在查询中添加select
。我相信异常意味着你的hql坏了。
答案 2 :(得分:0)
当您添加select
时,请在list
上调用Query
方法。如果您只想获得第一个结果,请从列表中获取第一个结果。