我正在尝试使用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是否需要任何特殊配置?
答案 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文件中:
运行您的应用程序。它将显示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()方法排除任何属性。