【问题标题】:Use a Criteria on top of another Criteria在另一个条件之上使用一个条件
【发布时间】:2009-08-20 21:22:24
【问题描述】:

我有一个关于标准的问题: 我如何使用过滤和/或使用其他标准做任何事情的标准(或类似标准)?

类似:

选择客户。* 来自 (从客户中选择 *)作为客户

真正的问题是别的,但实现这种行为会很棒......

(顺便说一句,欢迎 java 和 .net 提供帮助)

谢谢

【问题讨论】:

  • 你为什么不发布真正的问题?通用解决方案不一定最适合您的情况。

标签: c# java nhibernate hibernate activerecord


【解决方案1】:

这是不可能的,AFAIK。关于 HQL 的 tutorial 说:

请注意,HQL 子查询只能出现在 select 或 where 子句中。

我找不到关于 Criteria 的相同语句,但在 API 中创建条件的唯一方法是提供映射类型。支持子查询,但仅在 where 子句中。 Here 是 javadoc。

【讨论】:

  • 其实问题是我想在FROM子句上使用它,就像一个结果集,比如with (tsql)。
【解决方案2】:

您的 FROM 子句必须是映射对象。您可以在 WHERE 子句中进行子选择...类似于:

select c from clients c where c.id in (select c2.id from clients c2)

如果你能举一个更好的例子,那会有所帮助。您给出的示例可以简化为以下 HQL:

"from clients"

...这不是非常有用。

【讨论】:

  • 大声笑,谢谢。我的问题是,对于 nhibernate 通用标准来说,这是一个相当困难的查询……也许我需要多学习一点,才能找到更好的解决方案。
【解决方案3】:

您可以尝试将NHibernate.Criterion.InExpression 添加到您的条件中。

在这个博客上找到了一个例子: http://www.lostechies.com/blogs/jimmy_bogard/archive/2008/08/26/parameter-lists-in-nhibernate.aspx

【讨论】:

    【解决方案4】:

    我不确定我是否正确理解了您的问题,但如果您想对对象列表进行选择,您可以使用带有 DetachedCriteria 的子查询。我一直都在使用它,尤其是在创建左外连接时分页对象,这可能会导致我的实体数量不正确。

    假设您有购买产品的用户,并且存在多对多关系:

    Dim dc As DetachedCriteria = DetachedCriteria.For(GetType(User)).SetFirstResult(pageNumber * itemsPerPage).SetMaxResults(itemsPerPage) Session.CreateCriteria(GetType(user)).Add(Subqueries.PropertyIn("Id", dc)).CreateAlias("ProductsBought", "pb", NHibernate.SqlCommand.JoinType.LeftOuterJoin)

    Thom 是对的,也许你应该更准确一点……

    【讨论】:

    • Hibernate 支持 SELECT 和 WHERE 中的子查询。 OP 是关于 FROM 子句中的子查询。 AFAIK 做不到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-08
    • 2021-08-15
    • 2022-11-23
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 2020-12-14
    相关资源
    最近更新 更多