2010-01-17 36 views
3

這就是問題所在:休眠:我如何創建保存的過濾器然後使用它們?

我接到一個任務爲其 使用Spring,Hibernate和檢票的項目。

在特定的HTML頁面中,我必須有可能創建一個 過濾器(設置過濾器的名稱和 的參數)。我必須以這種方式創建過濾器列表 。在同一個 的時候,我必須有可能通過 編輯和刪除過濾器,並且當然要使用那個過濾器。

任何想法?我怎麼能這樣做?

我對Hibernate的使用經驗很低,但我需要爲項目提出一個主意。

我天真的解決方案:

我有類Table_Something,而我在我與Hibernate的數據庫有關聯的表,我需要創建的可能性爲用戶在我的網站創建此表格過濾器應用程序

因此,我將創建一個名爲Table_Something_Filters的類,我將在該數據庫中將一個表與Hibernate關聯起來。所以,當我在應用程序中爲Table_Something創建一個新的過濾器時,我會在我的Table_Something_Filters中插入一個新行。

這是個好主意嗎?我的解決方案有哪些改進?

另一個問題:如何使用我的過濾器?我查詢Table_Something_Filters獲取過濾器參數的值,然後是什麼?我怎樣才能生成查找器,或者我怎麼能根據Table_Something_Filters的值來查詢Table_Something?

歡迎任何想法或建議! :)

+0

這是面試問題嗎? – 2010-01-17 15:00:48

+0

不,不是採訪解決方案。 – 2010-01-17 15:04:54

+0

請使用比「XY - 我該怎麼做」更好的標題。 – 2010-01-17 15:23:34

回答

0

嗯,是的,你可以在你的* _Filter表保存的參數和值用戶輸入的過濾器,然後在你的DAO有這樣的方法:

public List<MyEntity> findByFilter(MyEntityFilter filter) { 
    //Use hibernate criteria api to build up your query depending on value in your filter 
    Criteria criteria = session.createCriteria(MyEntity.class) 

    if (filter.getName() != null) { 
     criteria.add(Restrictions.like("name", filter.getName()) 
    } 
    ... Go on testing and adding other parts of the query 

    return criteria.list(); 

的MyEntityFilter類將對於你可能的搜索過濾器的每個參數來說,都是一個簡單的類,帶有getter和setter。這個Filter類你可以用你存儲在數據庫中的值來構建它。如果過濾器不經常更改,則可以將它們緩存在應用程序中。如果只有幾個可過濾的參數,您可以將它們存儲在不同的列中,否則您寧可存儲如下字符串:name = John; color = blue,red,yellow; parameter3 = value *然後將字符串解析爲填寫你的Filter對象。注意你使用的分隔符字符,你應該從用戶輸入中逃脫它們!

然後,您可以動態建立一個搜索條件,只使用Filter類的填充字段。

如果您使用spring的休眠模式,請查看其HibernateDaoSupport,您還可以搜索常用於此複雜查詢構建的規範模式。

當然,您不必使用標準api,也可以建立一個HQL查詢字符串,但是標準api更適合這種類型的東西(並不總是更容易閱讀)。