对象Site
包含对象Tag
的集合。对象Tag
具有属性Title
。如何使用Hibernate Criteria API选择标签为“A”和“B”的所有网站?
答案 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));