Я плохо знаком с 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
Я думаю, что в HQL теперь есть "новое" ключевое слово.
выберите новую семью (мать, друг), потомство) от Eg.DomesticCat как мать Присоединяйся к матери. Котята как отпрыск
Аналогично проекциям/результатам в мире Критериев.
Похоже, что нужно делать то, что в спячке называется проекциями. Вот некоторая информация о том, как делать проекции в HQL:
http://www.devarticles.com/c/a/Java/Hibernate-HQL-in-Depth/1/
Вам придется использовать что-то вроде прогнозов.
Это означает, что вам придется создать класс, который проведет результаты, которые вы пытаетесь получить.
В вашем случае это может выглядеть что-то подобное:
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
Вы можете выбрать поля / столбцы с помощью 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();
каждый элемент в списке представляет собой найденную строку. Сам массив содержит два выбранных поля в том же порядке, который вы объявили их в заявлении.