2009-11-12 71 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