2009-07-14 28 views
1

我需要根據選擇的屬性來實現查詢的形式使用戶有機會 建立自己的審覈規定, ,操作員(=,<>,喜歡,不喜歡,在, 不in ...)和值 將那些與AND,OR邏輯運算符組合在一起。我想在我的數據庫中的 實體中存儲 那裏的標準。NHibernate的用戶定義的查詢

有沒有人有過這樣的要求? 我應該走哪條路:ICriteria還是HQL?還有其他選擇嗎?

我爲任何意見,建議,指針非常心存感激......

THX一萬。 Darko

回答

2

我實現了一個相當類似的要求。我使用Criteria API,因爲您不必使用字符串操作將查詢放在一起,這使得它更加穩定。

我在this question上發表了一個簡單的例子,如何把動態查詢放在一起。

在我們的解決方案中,我不允許OR操作,因爲它使它非常複雜(也是UI部分),性能可能變差。但後來,我們可能也會實施它。

設計決策需要根據您的要求和查詢和數據結構的複雜性來制定。

例如,我爲每個查詢做了一個過濾器類。過濾器類包含預定義的字段。這使得它更穩定,因爲你總是知道哪些字段可以在那裏,並且可以將它們放在查詢中的某些地方。某些字段需要子查詢。在我們的情況下,不可能使它成爲完全通用的(這意味着:查詢應該如何構建的所有信息都存儲在過濾器中)。每個過濾器類都有一個特定的方法將其轉換爲查詢。這給你很大的靈活性。

我的標準由對字段,運算符(枚舉)和參數的引用組成。