2010-12-05 62 views
2


我執行動態查詢與鬆散連接的查詢語言(如LINQ)
一個「QueryEngine」設計模式。
我很難從列表中爲特定的elemt編寫HQL。
即:通過選擇列表中的特定元素HQL

public class Cat() 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public Cat Child { get; set; } 
} 

現在,我想選擇由他的孩子一隻貓,所以HQL應該是這樣的:

SELECT cat FROM CAT as cat 
WHERE cat.Child = {"Any value or subsearch"} 

但是,如果我改變了Cat類有一個一對多參考:

public class Cat() 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public IList<Cat> Children { get; set; } 
} 

的HQL現在這個樣子(我想在列表中的特定子選擇)

SELECT cat FROM CAT as cat 
WHERE {"Any value or subsearch"} IN elements(Children} 

我的問題是,我可以做第二次查詢是在爲了類同的第一個
事情是這樣的:

SELECT cat FROM CAT as cat 
WHERE Children CONTAIN {"Any value or subsearch"} 

謝謝[=

回答

3

你可能期待對於這樣的事情:

select cat from Cat cat 
    join cat.Children child 
    where child.Something is true 
+0

這個HQL的問題在於,我必須告訴QueryEngine在選擇後插入一個「Join」子句。設計模式分爲不同的類,每個類負責將部分HQL插入整體查詢..因此,SELECT子句的生成器甚至不會知道WHERE子句的生成器。 – 2010-12-05 09:00:53

1

既不HQL也沒有Linq是偉大的動態利弊受限制的查詢。

我建議你用Criteria來代替。