HibernateTemplate findByExample不返回任何结果

时间:2010-08-02 21:11:11

标签: java hibernate spring orm query-by-example

我正在尝试使用Hibernate QBE(实际上是Spring的HibernateTemplate.findByExample())来返回用户名列表。我使用“已知良好”值进行搜索(用户名“JOHN.SMITH”确实存在于数据库中)。

不幸的是,我没有得到任何结果。以下是单元测试。

@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是否需要任何特殊配置?

4 个答案:

答案 0 :(得分:7)

这对我来说是纯粹的愚蠢。

用作示例的类中包含一些int和booleans(primitives)。由于这些值默认为0且为false,因此查询失败。

答案 1 :(得分:0)

你必须传递spring配置文件,否则它将如何获取连接和汇集信息..使用@annotation在类声明之上加载spring文件。

答案 2 :(得分:0)

您可以通过调用Hibernate的Example类中定义的excludeZeroes()方法来排除零值。在您的hibernate.cfg.xml文件中添加hibernate.show_sql属性将帮助您查看Hibernate创建的SQL查询中哪些值设置为0。 https://docs.jboss.org/hibernate/orm/5.4/javadocs/org/hibernate/criterion/Example.html#excludeZeroes--

答案 3 :(得分:0)

将以下内容添加到您的hibernate.cfg.xml文件中:
true

运行您的应用程序。它将显示Hibernate生成的SQL查询。 通过查看where子句,您将看到用于过滤的字段。 Netbeans screenshot

Criteria c = session.createCriteria(Parking.class);//deprecated since 5.2
Parking p = new Parking();
p.setCity("BROOKLYN");
Example ex = Example.create(p);
ex.excludeZeroes();   //exclude zero-valued properties
c.add(ex);

休眠示例对象将使用excludeZeroes()方法排除零值属性。

您可以使用excludeProperty()方法按名称排除某些属性,或者可以使用excludeNone()方法排除任何属性。