2010-08-02 39 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