我有2个数据表
Main
---
id // 1
Second
---
id //1; 2
property //"a"; "b"
creationDate(DD/MM/YYYY) //01/01/2000; 02/02/2002
mainId // 1; 1
连接是1- * 所以,我想要做的是通过“Second”中的属性查询我的“Main”表,但我想只搜索最新的属性。 因此,搜索“a”不得给出任何结果,因为“b”是更新的数据。
我通过SQL来做它,它看起来像这样:
select distinct m.id from Main m join Second s on m.id = s.mainId where s.property = 'b' and s.creationDate = (SELECT MAX(s2.creationDate) from Second s2 where s2.mainId = m.id);
我想出了一些java代码,但我不知道如何通过限制使用这个s2.mainId = m.id
部分:
DetachedCriteria d = DetachedCriteria.forClass(Second.class, "s1");
ProjectionList proj = Projections.projectionList();
proj.add(Projections.max("s1.creationDate"));
d.setProjection(proj).add(Restrictions.eq("WHAT COMES HERE");
或者我应该使用不同的方法? 不幸的是我需要使用Hibernate Criterion Interface,因为整个seach机制是通过Criterion编写的。
答案 0 :(得分:1)
DetachedCriteria innerCrit = DetachedCriteria.forClass(Second.class);
innerCrit.setProjection(Projections.max("creationDate");
innerCrit.add(Restrictions.eqProperty("id", "main.id"));
DetachedCriteriaouterCrit outerCrit = DetachedCriteria.forClass(Main.class, "main");
outerCrit.createAlias("second", "second");
outerCrit.add(Subqueries.eq(second.creationDate, innerCrit));
outerCrit.add(Restrictions.eq("second.property", "b"));
这个outerCrit将为您提供主要对象。