如何将此SQL查询转换为hibernate

时间:2014-03-29 02:49:56

标签: mysql hibernate

有人可以告诉我如何将这个SQL查询转换为hibernate吗?

SELECT * FROM sys_quote_master AS g1
INNER JOIN 
  (SELECT order_base_id, order_id FROM sys_quote_master
   GROUP BY order_base_id, order_date_last_revised 
   ORDER BY order_date_last_revised desc) AS g2
ON g2.order_id = g1.order_id;

基本上,

我试过这个并且它不起作用:

DetachedCriteria crit1 = DetachedCriteria.forClass(QuoteMaster.class);
ProjectionList pList = Projections.projectionList();
pList.add(Projections.groupProperty("orderBaseId"));
session = HibernateSessionFactory.currentSession();
Criteria crit = session.createCriteria(QuoteMaster.class);
Criteria c = crit.createCriteria("QuoteMaster", CriteriaSpecification.INNER_JOIN);
c.setProjection(pList);

我收到此错误:

org.hibernate.QueryException:无法解析属性:this of this:  QuoteMaster

我认为它与这行代码有关,我正在尝试为同一个表创建内部联接:

Criteria c = crit.createCriteria("QuoteMaster", CriteriaSpecification.INNER_JOIN);

基本上,我的问题是'如何使用Criteria.createCriteria或Criteria.createAlias创建到同一个表的连接?' Criteria类的doc声明第一个参数是一个以点分隔的属性路径,但这意味着什么呢? :)

到目前为止,我发现的每个例子都显示了如何使用2或3个表但不是同一个表,我不知道如何使用第一个参数。

1 个答案:

答案 0 :(得分:0)

我不知道你的实体是怎样的,这应该给出粗略的想法。

from SystQuoteMasterEntity sqm join ( select sqm1.orderbaseid, sqm1.orderId from SystQuoteMasterEntity sqm1 group by orderbaseid,orderdatelastrev order by orderdatelast desc) g2