4

我正在尝试使用 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

4 回答 4

7

这纯粹是我的愚蠢。

用作示例的类中有一些整数和布尔值(原语)。由于这些值默认为 0 和 false,因此查询失败。

于 2010-08-03T15:15:21.477 回答
0

您必须传递 spring 配置文件,否则它将如何获取连接和池信息.. 使用 @ 注释在类声明上方加载 spring 文件。

于 2010-08-03T04:53:18.517 回答
0

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

于 2020-07-24T22:53:03.237 回答
0

将以下内容添加到您的 hibernate.cfg.xml 文件中:
<property name="hibernate.show_sql">true</property>

运行您的应用程序。它将显示 Hibernate 生成的 SQL 查询。通过查看 where 子句,您将看到哪些字段用于过滤。 网豆截图

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);

Hibernate Example 对象将使用 excludeZeroes() 方法排除零值属性。

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

于 2020-07-26T00:41:37.070 回答