2009-11-12 73 views
1

我在NHibernate中遇到問題。NHibernate從中選擇案例

原來的SQL查詢看起來像

SELECT Id 
    ,Table1_Id 
    ,Table2_Id 
    ,Table3_Id 
FROM (
    SELECT Id 
     ,Table1_Id 
     ,Table2_Id 
     ,Table3_Id 
    FROM Table_123 
    WHERE Table2_Id = 72 

    UNION SELECT 
     100 As Id 
    ,151 As Table1_Id 
    ,72 As Table2_Id 
    ,20 As Table3_Id 
) a 
WHERE Table2_Id = 72 

我需要這個代碼在NHibernate.Criteria writen。 這可能嗎?

Greez Riyixy

+0

NHibernate與您未顯示的域對象一起工作。你如何期望別人知道你有什麼對象,以及它們與SQL表格有什麼關係? – 2009-11-12 11:17:33

+0

這是一個對象與int Id,Table1 oTable1,Table2 oTable2和Table3 oTable3。 對於表1,表2和表3中的一個int對象。 One DB Table pro對象。 – Riyixy 2009-11-12 11:34:57

回答

1

標準和HQL不支持工會https://www.hibernate.org/117.html#A21

因此,使用標準,你不能做到這一點查詢/ HQL目前的形式,但你將能夠使用原生SQL像這樣的查詢:

IQuery sqlQuery = sess.CreateSQLQuery("select Id,Table1_Id....", "ClassName", typeof(ClassName)); 
sqlQuery.SetMaxResults(50); 
IList entities = sqlQuery.List(); 

以供將來參考其更好使用抽象類來表達您的問題。表1 /表2 /表3使得難以理解該問題。

聯盟選擇是否非常必要 - 這基本上爲結果集添加了一行,如果您想讓它返回,您可以在代碼中輕鬆創建該實體。

+0

如果沒有工會呢? – 2011-02-01 07:03:31