gpt4 book ai didi

java - 具有主查询 ID 的 Hibernate 限制子查询

转载 作者:行者123 更新时间:2023-12-01 08:58:36 25 4
gpt4 key购买 nike

我有 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,因为整个搜索机制是通过 Criterion 编写的。

最佳答案

    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将为您提供Main对象。

关于java - 具有主查询 ID 的 Hibernate 限制子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41875349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com