Hibernate Criteria示例查询连接

时间:2013-06-19 14:20:32

标签: java hibernate hibernate-criteria

我有一个名为getByTemplate的dao方法。有两个表是学生和学校。这些表之间存在一对多的关系。我想做的是;

Student student = new Student();
student.setSchool(mySchool);
myDao.getByTemplate(student);

但问题是Hibernate在查询时会忽略对象。所以这个方法返回db的所有学生。有没有办法使用示例模型进行此查询?

@Transactional(readOnly = true)
public <T> List<T> getByTemplate(T templateEntity) {
    Criteria criteria = getCurrentSession().createCriteria(templateEntity.getClass());
    criteria.add(Example.create(templateEntity));

    return criteria.list();
}

1 个答案:

答案 0 :(得分:0)

您应该创建示例和两个createCriteria调用以同时使用Student和School:

@Transactional(readOnly = true)
public <T,U> List<T> getByTemplate(T templateEntity1, U templateEntity2) {
    Criteria criteria = getCurrentSession()
      .createCriteria(templateEntity1.getClass()).add(Example.create(templateEntity1))
      .createCriteria(templateEntity2.getClass()).add(Example.create(templateEntity2));
    return criteria.list();
}

您可以通过以下方式调用它:

myDao.getByTemplate(student, mySchool);