2010-08-02 64 views
4

我想使用Hibernate QBE(實際上,Spring的HibernateTemplate.findByExample())通過用戶名返回用戶列表。我使用「已知好」值進行搜索(用戶名「JOHN.SMITH」確實存在於數據庫中)。HibernateTemplate findByExample返回沒有結果

不幸的是,我沒有得到任何結果。以下是單元測試。

@Test 
public void testQueryByExample() { 

    User qbeUser = new User(); 
    qbeUser.setUsername("JOHN.SMITH"); 

    List<User> userList = userDao.queryByExample(qbeUser); 
    Assert.notNull(userList); 
    Assert.isTrue(userList.size() > 0, "List of returned users must not be 0"); 

} 

的queryByExample()方法是在一個通用的DAO定義:

@SuppressWarnings("unchecked") 
public List<T> queryByExample(T obj) { 
    return getHibernateTemplate().findByExample(obj); 
} 

有什麼樣的工作需要QBE特殊配置的?

+0

我第二@ skaffman的請求,轉向Hibernate SQL日誌記錄肯定會有所幫助。 – 2010-08-03 06:08:28

回答

7

這對我來說很愚蠢。

被用作示例的類在其中有一些int和布爾值(基元)。由於這些值默認爲0和false,因此查詢失敗。

+5

是的,'findByExample()'在其條件中包含所有基本屬性,但忽略其值爲null的所有非基本屬性。但是,Hibernate'Example'類具有更靈活的標準選項。請參閱http://docs.jboss.org/hibernate/stable/core/reference/en/html/querycriteria.html#querycriteria-examples。 – 2010-08-03 22:10:12

+0

令人驚歎的評論。我花了很長時間尋找合適的文檔,但找不到它們。 – ashes999 2011-02-14 16:53:35

0

您必須傳遞spring配置文件,否則它將如何獲取連接和池信息。使用@註釋來加載類聲明上方的spring文件。

+0

測試類註解爲 @ContextConfiguration(locations =「classpath:applicationContext.xml」) 被測試的類正在被成功注入。我的其他方法不使用QBE很好,但QBE不起作用。 – Jason 2010-08-03 13:44:56

+0

對於條件查詢,您可以使用hibernateTemplate的findByCriteria方法。 – TaherT 2010-08-04 04:46:31