Как выбрать из HQL - PullRequest
       14

Как выбрать из HQL

6 голосов
/ 07 января 2010

Я новичок в HQL и у меня есть преобразованное SQL-выражение, но я не могу выбрать SQL-выражение:

select SenseDate as Time,SenseValue as Value
from UserData
where NetworkID = '23'
and IODeviceID = '129'
and SenseDate >=  DateAdd("d",-1, GETDATE())
and SenseDate<=GETDATE()

Я могу запустить эту часть на HQL без проблем:

from UserData 
where NetworkID = '23'
and IODeviceID = '129'
and SenseDate >=  DateAdd(d,-1, GETDATE())
and SenseDate<=GETDATE()

Однако мне нужны только значения SenseDate и SenseValue, может кто-нибудь показать мне, как выбирать, когда я пытаюсь добавить select SenseDate, SenseValue и т. Д. Я продолжаю получать ошибки в Netbeans

Ответы [ 4 ]

5 голосов
/ 10 января 2010

Вы можете выбрать поля / столбцы, используя HQL. Похоже на следующее:

select
    SenseDate,
    SenseValue
from
    UserData
where
    NetworkID = '23'
and
    IODeviceID = '129'
and
    SenseDate >= DateAdd(d, -1, GETDATE())
and
    SenseDate <= GETDATE()

Когда вы выполните это, вы получите список массивов объектов:

final List<Object[]> values = query.list();

Каждый элемент в списке представляет найденную строку. Сам массив содержит два выбранных поля в том же порядке, в котором вы объявили их в операторе.

4 голосов
/ 10 января 2010

Вам придется использовать что-то вроде проекций.

Это означает, что вам нужно будет создать класс, который будет содержать результаты, которые вы пытаетесь получить.

В вашем случае это может выглядеть примерно так:

public class SenseUserData
{
    public DateTime SenseDate
    {
        get;
        private set;
    }

    public Decimal SenseValue
    {
        get;
        private set;
    }

    public SenseUserData( DateTime date, Decimal value )
    {
       this.SenseDate = date;
       this.SenseValue = value; 
    }
}

Тогда вам придется сообщить NHibernate о существовании этого класса. Вы можете сделать это, «импортировав» это. Таким образом, это означает, что вам не нужно создавать для него файл сопоставления, вам просто нужно сделать это в файле hbm:

<import class="myclassname" />

А затем вы можете сделать это на HQL:

select new SenseUserData (SenseDate, SenseValue) from UserData
4 голосов
/ 07 января 2010

Я думаю, HQL теперь имеет ключевое слово "new".

выберите новую семью (мама, приятель, offspr) от Eg.DomesticCat как мама присоединяйся к маме осталось присоединиться к маме. Котята как дети

Аналогично проекциям / преобразователям результатов в мире Criteria.

1 голос
/ 07 января 2010

Похоже, вам нужно делать то, что hibernate вызывает проекции. Вот некоторая информация о том, как делать прогнозы в HQL:

http://www.devarticles.com/c/a/Java/Hibernate-HQL-in-Depth/1/

...