public List<TaRiskProfilingDetail> getRiskImpactList() {
DetachedCriteria dc1 = DetachedCriteria.forClass(TaRiskProfilingDetail.class, "TaRS1");
DetachedCriteria dc2 = DetachedCriteria.forClass(TaRiskProfilingDetail.class, "TaRS2");
dc1.createAlias("travelAgent", "Ta1", JoinType.LEFT_OUTER_JOIN);
dc2.createAlias("travelAgent", "Ta2", JoinType.LEFT_OUTER_JOIN);
dc2.add(Restrictions.eqProperty("Ta1.id", "Ta2.id"));
ProjectionList projections = Projections.projectionList();
projections.add(Projections.max("TaRS2.createdDate"), "createdDate");
dc2.setProjection(projections);
dc1.add(Subqueries.propertyEq("TaRS1.createdDate", dc2));
dc1.setResultTransformer(DetachedCriteria.DISTINCT_ROOT_ENTITY);
dc1.createAlias("Ta1.licence", "licence", JoinType.LEFT_OUTER_JOIN);
addIn(dc1, "licence.status.code", Codes.TaStatuses.GENERALLY_ACTIVE);
dc1.addOrder(Order.desc("riScore"));
return getList(dc1);
};
可以认为,dc1 选出了一个记录,之后在dc2 中进行筛选。也就是select 操作是一条记录。