我正在编写一个带有spring mvc和hibernate的web应用程序,我使用hibernate标准来搜索给maxset值的结果集,但我有一个问题,我不知道如何将以下SQL语句转换为hibernate标准代码:
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
我现在写的标准:
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"))
));
给出了这样的结果集,更少的列以便于说明:
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
我已经尝试了在线搜索的分离标准,但似乎选择了一条记录的情况。我还尝试使用 app_id 的 groupProperty 和 seq_number 的 max ,只给出了seq_number = 1的记录。
因为我已经坚持了几天。 任何帮助将不胜感激,提前谢谢。
答案 0 :(得分:0)
您可以使用createSQLQuery在hibernate中使用本机查询。