2013-06-19 112 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);