2015-03-19 24 views
0

我正在写一个具有spring mvc和hibernate的web应用程序,并且我使用hibernate标准来进行搜索以给出结果集最大列值,但是我有一个问题,那就是我不知道怎么下面的SQL语句转换成休眠标准代码:休眠标准加入3个表后获得最大列值的记录

Criteria cr = session.createCriteria(MdApp.class, "mdapp");   
      cr.createAlias("mdapp.mdLists", "mdls", JoinType.LEFT_OUTER_JOIN); 
      cr.createAlias("mdapp.appEnqs", "ae", JoinType.LEFT_OUTER_JOIN); 
      cr.setProjection(Projections.distinct(Projections.projectionList() 
       .add(Projections.property("mdapp.displayId").as("displayId")) 
       .add(Projections.property("mdapp.type").as("type")) 
       .add(Projections.property("mdls.listId").as("listId")) 
       .add(Projections.property("mdapp.dbUser").as("dbUser")) 
       .add(Projections.property("mdapp.status").as("status")) 
       .add(Projections.property("mdapp.dtReceived").as("dtReceived")) 
       .add(Projections.property("mdapp.dtAck").as("dtAck")) 
       .add(Projections.property("mdapp.dtStatus").as("dtStatus")) 
       .add(Projections.property("mdapp.dtAppr").as("dtAppr")) 
       .add(Projections.property("mdls.dtIssue").as("dtIssue")) 
       .add(Projections.property("ae.dtEnquiry").as("dtEnq")) 
       .add(Projections.property("ae.dtReply").as("dtReply")) 
       .add(Projections.property("ae.id.sysAppId").as("sysAppId")) 
       .add(Projections.property("ae.id.type").as("AppEnqtype")) 
       .add(Projections.property("ae.id.seqNo").as("seq"))  

       ));  

给出了结果集这个样子,少列易于说明:

select * from 
(select md.display_id as mddisid, 
md.type as mdtype, 
ml.list_id, md.vo, 
md.status, 
md.dt_received, 
md.dt_ack, 
md.dt_status, 
md.dt_appr,ml.dt_issue, 
ae.dt_enquiry, 
ae.dt_reply, 
ae.sys_app_id as sysappid, 
ae.type, 
ae.seq_no as sq 
from md_app md 
LEFT JOIN md_list ml 
ON md.sys_app_id = ml.sys_app_id 
LEFT JOIN app_enq ae 
ON ml.sys_app_id = ae.sys_app_id 
where md.app_id = "AN000008") a 
inner join (
select md.display_id as mddisid, 
max(ae.seq_no) as maxsq 
from md_app md 
LEFT JOIN md_list ml 
ON md.sys_app_id = ml.sys_app_id 
LEFT JOIN app_enq ae 
ON ml.sys_app_id = ae.sys_app_id 
where md.app_id = "AN000008" <-- an ID provided for searching 
group by mddisid 
) ss on a.mddisid = ss.mddisid and a.sq = ss.maxsq 

我已经写了现在的标准

app_id seq_number 
    AN01  1 
    AN01  2 
    AN03  1 
    AN03  2 
    AN03  3 
    AN04  1 

,但我想实现:

app_id seq_number  
    AN01  2  
    AN03  3 
    AN04  1 

我曾尝试分离标准我在网上用Google搜索,但如果选择了一条记录似乎对形势。我使用groupProperty的 APP_ID最大的seq_number,只有seq_number = 1的记录,给出还尝试。

因为我坚持了几天。 任何帮助将不胜感激,在此先感谢。

回答

0

您可以在使用createSQLQuery的hibernate中使用本机查询。