在另一个标准之上使用标准

时间:2009-08-20 21:22:25

标签: c# java nhibernate hibernate activerecord

我对标准有疑问: 我如何使用过滤和/或用其他标准做任何事情的标准(或类似)?

类似的东西:

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

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

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

感谢

4 个答案:

答案 0 :(得分:2)

AFAIK无法做到。关于HQL的tutorial说:

  

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

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

答案 1 :(得分:1)

您的FROM子句需要是映射对象。你可以在WHERE子句中做一个子选择......类似于:

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

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

"from clients"

......这不是非常有用。

答案 2 :(得分:1)

您可以尝试在条件中添加NHibernate.Criterion.InExpression

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

答案 3 :(得分:0)

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

想象一下,你有购买产品的用户,他们的关系很多:

Dim dc As DetachedCriteria = DetachedCriteria.For(GetType(User))。SetFirstResult(pageNumber * itemsPerPage).SetMaxResults(itemsPerPage) Session.CreateCriteria(GetType(user))。添加( Subqueries.PropertyIn(“Id”,dc))。CreateAlias(“ProductsBought”,“pb”,NHibernate.SqlCommand.JoinType.LeftOuterJoin)< / p>

汤姆是对的,也许你应该更精确......