Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HibernateTemplate findByExample不返回任何结果_Java_Hibernate_Spring_Orm_Query By Example - Fatal编程技术网

Java HibernateTemplate findByExample不返回任何结果

Java HibernateTemplate findByExample不返回任何结果,java,hibernate,spring,orm,query-by-example,Java,Hibernate,Spring,Orm,Query By Example,我试图使用HibernateQBE(实际上是Spring的HibernateTemplate.findByExample())按用户名返回用户列表。我使用“已知良好”值进行搜索(数据库中确实存在用户名“JOHN.SMITH”) 不幸的是,我没有得到任何结果。下面是单元测试 @Test public void testQueryByExample() { User qbeUser = new User(); qbeUser.setUsername("JOHN.SMITH");

我试图使用HibernateQBE(实际上是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");

}
@测试
public void testQueryByExample(){
用户qbeUser=新用户();
qbeUser.setUsername(“JOHN.SMITH”);
List userList=userDao.queryByExample(qbeUser);
Assert.notNull(userList);
Assert.isTrue(userList.size()>0,“返回的用户列表不能为0”);
}
queryByExample()方法是在泛型DAO中定义的:

@SuppressWarnings("unchecked")
public List<T> queryByExample(T obj) {
    return getHibernateTemplate().findByExample(obj);
}
@SuppressWarnings(“未选中”)
公共列表查询示例(T obj){
返回getHibernateTemplate().findByExample(obj);
}

QBE是否需要任何特殊配置才能工作?

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

这完全是我的愚蠢之举


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

您可以通过调用excludeZeroes()方法排除零值,该方法在Hibernate的示例类中定义。将hibernate.show_sql属性添加到hibernate.cfg.xml文件将帮助您查看在hibernate创建的sql查询中哪些值设置为0。
将以下内容添加到hibernate.cfg.xml文件中:
真的

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

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


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

I second@skaffman的请求,打开Hibernate SQL日志记录肯定会有帮助。测试类用@ContextConfiguration(locations=“classpath:applicationContext.xml”)注释正在成功注入被测试的类。我的其他不使用QBE的方法很好,但QBE不起作用。是的,
findByExample()
在其条件中包括所有基本属性,但忽略所有值为null的非基本属性。然而,Hibernate
示例
类具有更灵活的条件选项。看,这是一个惊人的评论。我花了很长时间寻找合适的文档,却找不到。
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);