0

我有一个简单Criteria的方法,用于获取我有 ID 的学生的学校我只需要学校而不是学生我有一个简单的编码,例如

public School loadSchool(Integer studentID) 
{        
    final Session session = getHibernateTemplate().getSessionFactory().openSession();
    final Criteria like = session.createCriteria(Student.class)
    .add(idEq(studentID))
    .setFetchMode("School",FetchMode.JOIN); 
    final School retValue = ((Student)like.uniqueResult()).getSchool();
    session.close();
    return retValue;
}

如您所见,我也检索到Student and the School了我只需要School我的问题

1)。除了我可以提取[从数据库中检索]之外setProjections(),还有一种方法只能提取[从数据库中检索]而School fields不是Student fields因为有很多字段,并且是一种令人讨厌的列出所有字段setProjection并影响性能之类的东西

setProjectionOnlyPropertiesForClass(School.class).

2)。有任何解决方法。

多谢。

4

1 回答 1

1

问题是您查询的是学生对象而不是学校对象!对应的 HQL 查询为:

select student
from Student student join student.school
where student.id=:studentId

相反,您应该查询 School 对象:

select school
from School school, Student student
where student.school = school and student.id=:studentId

(也许你应该使用 HQL 而不是标准查询——它们更容易编写和理解)。

于 2013-09-24T13:42:51.710 回答