1

我是 HQL 新手,我需要进行以下 MSSQLServer 查询,该查询在所有数据库中执行每月和每年的销售额,

select count(sales) as monthsales from salesdairy where propertytype in ('item1') and MONTH(time) = MONTH(getdate())
select count(sales) as yearsales from salesdairy where propertytype in ('item1') and YEAR(time) = YEAR(getdate())

我对这个功能感到震惊, MONTH(time) = MONTH(getdate()),YEAR(time) = YEAR(getdate())在 HQL 中是否有任何等价物。如果有人能给我一个 HQL 等价物,我将不胜感激。

4

1 回答 1

1

在 HQL 而不是表中,您有实体(类对象)。我想你的表 salesdiary 成为 SalesDiary 实体。

第一个查询:

select count(S.id)
from SalesDiary S
where S.propertytype in ('item1')
and MONTH(S.time) = MONTH(current_date)

第二个查询:

select count(S.id)
from SalesDiary S
where S.propertytype in ('item1')
and YEAR(S.time) = YEAR(current_date())

MONTH 函数获取输入日期的月份编号,YEAR 函数获取输入日期的年份编号。

current_date() 等效于 SQL Server GETDATE()。

EDIT AFTER COMMENT 很奇怪,Hibernate 必须使用正确的下划线 DBMS 功能进行转换。

如果你可以使用参数试试这个:

select count(S.id)
from SalesDiary S
where S.propertytype in ('item1')
and YEAR(S.time) = YEAR(:currDate)

当您将 HQL 查询变为对象 Query 时,您将通过以下方式将 currDate 参数替换为 setDate 函数:

String hql = 
  "select count(S.id)
  from SalesDiary S
  where S.propertytype in ('item1')
  and YEAR(S.time) = YEAR(:currDate)";

Query q = session.createQuery(hql);

q.setDate("currDate", new GregorianCalendar().getTime());
q.list();

我希望现在没问题;)

于 2013-10-10T10:18:54.613 回答