此SQL查询的HQL等效查询

时间:2015-01-31 11:22:25

标签: sql sql-server hibernate hql

我的实体类是

@Entity
@Table(name="SMSSalesData")
public class SMSSalesDataEntity implements Serializable{
@Id @GenericGenerator(name = "native_generator", strategy = "native")
 @GeneratedValue(generator = "native_generator")
private Integer ID;

@Column(name="CMSCode", length=50)
private String cmsCode;

@Digits(integer = 18, fraction = 2)
@Column(name = "MSQty", precision = 20)
private Double msQty;

@Digits(integer = 18, fraction = 2)
@Column(name = "HSDQty", precision = 20)
private Double hsdQty;

@Digits(integer = 18, fraction = 2)
@Column(name = "LubesQty", precision = 20)
private Double lubesQty;

@Column(name = "MobileNo", length = 20)
private String mobileNo;

@Column(name = "MsgDatetime")
@Temporal(TemporalType.TIMESTAMP)
private Date msgDatetime;

@Column(name = "CreatedDatetime", length = 20)
private Date createdDatetime;

@Column(name = "shortcode", length = 20)
private String shortcode;

@Column(name = "productcode", length = 20)
private String productcode;

@Digits(integer = 18, fraction = 2)
@Column(name = "MSStock", precision = 20)
private Double msStock;

@Digits(integer = 18, fraction = 2)
@Column(name = "HSDStock", precision = 20)
private Double hsdStock;

我希望Hibernate查询此实体类,以msgDateTime按月和msgDateTime组的月份和年份获得MSQty的总和。

SELECT  SUM(MSQty) as sum_ms_qty FROM SMSSalesData where MONTH(MsgDatetime)=10 and YEAR(MsgDatetime)=2014 GROUP BY MONTH(MsgDatetime) ;

以上是此MSQty获取总和的SQL查询。

你能为我提供hibernate或标准查询吗? 谢谢。

1 个答案:

答案 0 :(得分:0)

在HQL中:

SELECT sum(SMSSalesDataEntity.MSQty) as sum_ms_qty 
from SMSSalesDataEntity 
WHERE month(SMSSalesDataEntity.msgDatetime)= 10 and year(SMSSalesDataEntity.msgDatetime) = 2014 
GROUP BY month(SMSSalesDataEntity.msgDatetime)

HQL文档:https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html

dateadd和datediff 自定义函数需要根据您连接到 Date operations in HQL

的数据库添加
SELECT SUM(MSQty) + SUM(HSDQty) FROM [essar].[dbo].[SMSSalesData] WHERE [MsgDatetime] < CURRENT_TIMESTAMP and [MsgDatetime] > DATEADD(Month, -6, CURRENT_TIMESTAMP) GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, MsgDatetime), 0); 

在HQL中:

SELECT SUM(SMSSalesDataEntity.MSQty) + SUM(SMSSalesDataEntity.HSDQty) FROM SMSSalesDataEntity
WHERE SMSSalesDataEntity.msgDatetime < CURRENT_TIMESTAMP AND SMSSalesDataEntity.msgDateTime >
DATEADD(MONTH, -6, CURRENT_TIMESTAMP) GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, SMSSalesDataEntity.msgDateTime), 0);