2009-08-20 63 views
1

我對標準有疑問: 如何使用標準(或類似標準)過濾和/或使用其他標準做任何事情?在另一個標準之上使用標準

喜歡的東西:

選擇客戶端*從 (SELECT * FROM客戶)爲客戶

真正的問題是另一回事,但實現這種行爲將是了不起的......

(順便說一句,Java和.NET的歡迎,幫助)

感謝

+0

你爲什麼不張貼真正的問題?一般的解決方案不一定適合您的情況。 – 2009-08-20 21:26:57

回答

2

它不能完成,AFAIK。關於HQL的tutorial說:

請注意,HQL子查詢只能出現在select或where子句中。

我找不到關於Criteria的相同聲明,但在API中創建條件的唯一方法是給映射類型。支持子查詢,但僅限於where子句。 Here是javadoc。

+0

事實上,我想在FROM子句中使用它,就像結果集一樣,例如(tsql)。 – 2009-08-25 13:17:03

1

你FROM子句需要是一個映射對象。你可以做的WHERE子句中子查詢......是這樣的:

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

這將有助於如果你能給一個更好的例子。您提供的示例可以降低到以下HQL:

"from clients" 

...這不是非常有用。

+0

哈哈,謝謝。我的問題是,這是一個相當艱難的查詢,把nhibernate常見的標準... 也許我需要多學習一點,來想出一個更好的解決方案。 – 2009-08-25 13:18:14

0

我不確定我是否正確理解你的問題,但是如果你想在對象列表上選擇一個對象,你可以使用子查詢DetachedCriteria。我一直都在使用它,特別是在創建左外連接時分頁對象,這可能會導致實體數量不正確。

想象一下,你已經買誰的產品,有關係多對多得到用戶:

昏暗的DC作爲的DetachedCriteria = DetachedCriteria.For(的GetType(用戶))SetFirstResult(PAGENUMBER * itemsPerPage).SetMaxResults(itemsPerPage ) Session.CreateCriteria(的GetType(用戶))。加入(Subqueries.PropertyIn( 「ID」,DC)).CreateAlias( 「ProductsBought」, 「PB」,NHibernate.SqlCommand.JoinType.LeftOuterJoin)

湯姆的權利,也許你應該更精確...

+1

Hibernate支持SELECT和WHERE caluse中的子查詢。 OP是關於FROM子句中的子查詢。它不能做AFAIK。 – 2009-08-21 13:23:43

+0

不幸的是,他是對的... 我的意圖是使用從條款... – 2009-08-25 13:15:22