2015-01-31 3 views
0

Моего класса сущности являетсяHQL eqvivalent запрос для этого SQL запроса

@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 запроса для данного класса объектов, чтобы получить сумму MSQty по месяцу и году группы msgDateTime по месяцу msgDateTime.

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

Выше этого SQL-запроса для получения суммы для этого MSQty.

Можете ли вы предоставить мне запрос на спящий режим или критерии для этого же. Спасибо.

ответ

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 Docs: 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); 
+0

спасибо U piratheep .. может у Pls обеспечить HQL для этого тоже .. SELECT SUM (MSQty) + SUM (HSDQty) из [Essar]. [DBO]. [SMSSalesData] ГДЕ [MsgDatetime] DATEADD (месяц, -6, CURRENT_TIMESTAMP) GROUP BY DATEADD (MONTH, DATEDIFF (MONTH, 0, MsgDatetime), 0); – Parag122

+0

для пользовательских функций dateadd и датиффы необходимо добавить на основе базы данных, к которой вы подключаетесь к операциям Date в HQL. Http://stackoverflow.com/questions/13568914/date-operations-in-hql?rq=1 – Piratheep