2011-06-23 13 views
0

我正在使用休眠的項目。 我們有一個數據庫,現在我想查詢它。有沒有什麼辦法可以恢復匹配多個標準的對象(不是必需的ID)?

在理想的情況下,我知道我能夠通過ID或Hibernate的查詢語言來恢復對象。但是,如果我有一種方法可以發送一個對象,並使用我想要用作過濾器的屬性並取回該表中與這些標準匹配的所有對象,那麼對我來說這將是最理想的。 例如

Person p = new Person(); 
p.setName("Junior"); 
p.setAge(10); 
session.Load(Person.class, p); //this would return all "junior" with age = 10 

我想象的Hibernate將提供類似的功能。可以?我應該使用哪種方法?

感謝, 奧斯卡

編輯: @nIKUNJ表明我的標準,這將是非常相似,我需要的東西。 問題是:我想有一個DatabaseManager類,它將處理保存,加載等功能。 例如,我的負荷應該是這樣的:

public <T extends Serializable> List<T> load(T filters, Class<T> type) 
{ 
     Session session = HibernateUtil.getSessionFactory().getCurrentSession(); 

     List<T> searchResult; 
     session.beginTransaction(); 

     searchResult = ((List<T>)session.get(type, filters)); //assuming the method 
               //I asked for in the question exists 


     return searchResult; 
} 

這樣,我就可以到幾乎任何對象發送到該方法和方法將查詢數據庫,並返回我的對象​​列表匹配的是標準。

你有什麼想法我可以模仿這種使用Criteria類的行爲嗎?

感謝, 奧斯卡

回答

1

我覺得休眠Criteria可以幫助你。

您可以使用一個parameter類有三個屬性:name, type and valueName將是你的名字列,type將等於,小於,大於等等的條件類型,並且value將是該條件的值。
例如,name="person.age", type = greater equal, value=18。創建一個將這些參數轉換爲條件對象的實用程序方法。

現在,創建一個方法是這樣的:

public <T extends Serializable> List<T> load(List<Parameter> params, Class<T> type) 
{ 
     Session session = HibernateUtil.getSessionFactory().getCurrentSession(); 

     List<T> searchResult; 
     session.beginTransaction(); 
     Criteria criteria = createCriteriaFromParams(params);  
     searchResult = criteria.list(); 

     return searchResult; 
} 

這是非常簡單的方案。您可以通過在參數列表中添加一些額外的屬性來創建一些複雜標準。

+0

這將是我想要的。我的腦海裏出現了一個問題,我會更新當前的問題以保持最新。謝謝:) – JSBach

+0

我已經更新了我的答案。請看看它。 – nIKUNJ

+0

我認爲這會對我有幫助。非常感謝! :) – JSBach

相關問題