我对标准有疑问: 我如何使用过滤和/或用其他标准做任何事情的标准(或类似)?
类似的东西:
选择客户。*来自 (选择*来自客户)作为客户
真正的问题是别的,但实现这种行为会很棒......
(顺便说一句,欢迎java和.net提供帮助)
感谢
答案 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>
汤姆是对的,也许你应该更精确......