簡體   English   中英

Hibernate:如何創建已保存的過濾器然后使用它們?

[英]Hibernate: How can I create saved filters and then use them?

這就是問題:

我收到一個使用Spring,Hibernate和Wicket的項目的任務。

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

有任何想法嗎? 我怎么能這樣做?

我對Hibernate的體驗非常低,但我需要為項目提出一個想法。

我天真的解決方案:

我有類Table_Something,我已經將數據庫中的表與Hibernate關聯,我需要創建用戶在我的Web應用程序中為此表創建過濾器的可能性

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

這是一個好主意嗎? 我的解決方案的任何改進?

另一個問題:我如何使用我的過濾器? 我查詢Table_Something_Filters來獲取過濾器參數的值然后是什么? 如何根據Table_Something_Filters中的值生成查找程序,或者如何查詢Table_Something?

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

好吧,是的,您可以在* _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類的填充字段動態構建搜索條件。

如果你使用帶有hibernate的spring看看他們的HibernateDaoSupport ,你也可以搜索通常用於這個復雜查詢構建的規范模式。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM