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

Я плохо знаком с 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

6
задан Bill the Lizard 21 June 2011 в 11:19
поделиться

4 ответа

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

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

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

4
ответ дан 8 December 2019 в 17:21
поделиться

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

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

1
ответ дан 8 December 2019 в 17:21
поделиться

Вам придется использовать что-то вроде прогнозов.

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

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

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

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

<import class="myclassname" />

, а затем вы можете просто сделать это в HQL:

select new SenseUserData (SenseDate, SenseValue) from UserData
4
ответ дан 8 December 2019 в 17:21
поделиться

Вы можете выбрать поля / столбцы с помощью 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();

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

5
ответ дан 8 December 2019 в 17:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: