2013-06-19 108 views
1

我有一个名为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

恕我直言HQL加入querys与标准相比,它们的可读性更强,编写更容易。 – osdamv

回答

0

您应该创建实施例和两个个createCriteria调用来使用学生和学校:

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