如何使用“和”条件过滤相关集合(Hibernate Criteria API)

时间:2011-05-01 22:01:15

标签: hibernate criteria

对象Site包含对象Tag的集合。对象Tag具有属性Title。如何使用Hibernate Criteria API选择标签为“A”和“B”的所有网站?

1 个答案:

答案 0 :(得分:2)

我假设您尝试生成的本机SQL看起来如下所示:

select *
from Site st
where st.id in (
    select tg.site_id
    from Tag tg
    where tg.title in ('A', 'B')
)

我认为以下Criteria示例将为您提供所需的结果(您可能需要编辑属性名称)。

DetachedCriteria d = DetachedCriteria.forClass(Tag.class, "tg");
d.setProjection(Projections.projectionList().add(Projections.property("tg.siteId")));
d.add(Restrictions.in("tg.title", new String[]{"A", "B"}));

Criteria criteria = session.createCriteria(Site.class, "st");
criteria.add(Subqueries.propertyIn("st.id", d));