【问题标题】:Add criteria to subselect?添加条件以进行子选择?
【发布时间】:2012-04-23 15:55:56
【问题描述】:

使用基于 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 )。

他们的意思是让这个“添加”语句应用于 FetchMode(即子选择)而不是 fetchmode 随后作用的 Criteria。

对休眠条件语句没有经验,我不确定这是否可能?

【问题讨论】:

    标签: java hibernate criteria hibernate-criteria


    【解决方案1】:

    您可以使用别名来完成您想要做的事情:

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

    查看 this section 的 hibernate 文档了解更多信息

    【讨论】:

    • 不幸的是,我尝试的许多变体似乎都不起作用。您引用的部分似乎没有像我们在这里所做的那样应用别名来获取模式语句,这可能是一个问题吗?
    • 没关系。您可以使用此查询中涉及的对象的映射来更新您的帖子吗?您还可以包括您正在形成的完整条件查询吗?
    猜你喜欢
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 2021-03-27
    • 2018-02-26
    • 2016-12-27
    • 2016-12-25
    • 1970-01-01
    • 2011-01-13
    相关资源
    最近更新 更多