添加标准以进行subselect?

时间:2012-04-23 15:55:57

标签: java hibernate criteria hibernate-criteria

使用基于Hibernate Criteria的查询,您是否可以根据子选择添加条件?

具体而言,开发人员具有以下代码;

 criteria.setFetchMode("user", FetchMode.JOIN).add(
                Restrictions.eq("company.id", companyId));

他们的意图是这样的;

select a.* from tableA a where a.user in 
        (select b.user from tableB b where b.companyId = 'companyId')

IE'选择此表中具有companyId ='companyId'的用户集中的用户的所有记录,详见另一个表。

但是上面的基于Criteria的语句没有按预期工作,我相信setFetchMode返回的是它调用的相同条件,add语句将company.id = companyId子句添加到整个Criteria(即tableA) )。

他们的意思是将这个'add'语句应用于FetchMode(即子选择)而不是fetchmode随后作用的Criteria。

对于hibernate条件语句没有经验,我不确定这是否可行?

1 个答案:

答案 0 :(得分:1)

您可以使用别名来完成您尝试做的事情:

 criteria.setFetchMode("user", FetchMode.JOIN).createAlias("company","c").add(
                Restrictions.eq("c.id", companyId));

查看this section hibernate文档以获取更多信息