Java Hibernate Criteria仅返回一个实体字段

时间:2013-09-24 13:34:51

标签: java hibernate criteria projection

我有一个简单的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)。我可以提取[{1}}以外的其他方法,只能setProjections()而不是School fields提取[{1}}而不是Student fields,因为有许多字段,并且是一种烦人的列出所有字段setProjection并影响

等性能

setProjectionOnlyPropertiesForClass(School.class)

2)。有任何解决方法。

非常感谢。

1 个答案:

答案 0 :(得分:1)

问题是您正在查询Student对象而不是School对象!相应的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代替标准查询 - 它们更容易编写和理解)。