2013-08-08 5 views
0

Я хочу вернуть только один столбец из таблицы. Это мой DAO:Как вернуть только один столбец в Hibernate?

@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; 
    } 

Console говорит:

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

Я думаю, что вы забыли вызвать 'getResultList()' или 'list' в объекте Query. И возвратите 'List ' вместо 'String' – Wirus

ответ

1

Ваш ВЫБРАТЬ пункт отсутствует:

@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

+0

Посмотрите, пожалуйста, –

+0

Действительно? Это «принятый» ответ? Он просто возвращает строку запроса вместо результата запроса. – Wirus

+0

Да, lol, принятый до того, как была введена правильная версия в соответствии с моим ответом и комментарием. – Wirus

0

Вы должны использовать имена классов/полей, не таблица/colu mn имен. Кроме того, запрос не вернет список экземпляров вашего класса для этой таблицы, а скорее массив. Кроме того, поставьте select в свой запрос. Я считаю, что исключение означает, что ваш hql сломан.

+0

Но uri - это имя поля. Посмотрите. –

+0

Теперь он говорит: 'TEMPLATES не отображается [select uri from TEMPLATES WHERE state = 1]' –

+0

@John, если у вас все еще есть эта проблема, см. Http://stackoverflow.com/questions/8524767/hibernate-throws-strange -error-class-is-not-mapped – Wirus

0

Как вы добавили select, а затем вызвать метод list на вашем Query. И получить первый результат из списка, если вы хотите получить только первый.

Смежные вопросы