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

标签 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;
}

如您所见,我也检索了学生和学校,我只需要学校我的问题是

1).除了 setProjections() 之外,还有一种方法可以仅提取[从数据库中检索] School fields 而不是 Student fields 因为到许多字段,并且在 setProjection 中列出所有字段是一种烦人的行为,并且会影响性​​能,例如

setProjectionOnlyPropertiesForClass(School.class)

2).有任何解决方法。

非常感谢。

最佳答案

问题是您正在查询 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 而不是标准查询 - 它们更容易编写和理解)。

关于Java Hibernate Criteria 仅返回一个实体字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18983148/

相关文章:

hibernate - 避免使用 Hibernate Criteria 或 HQL 查询进行二次选择或连接

java - HQL:条件查询内的划分

Java根据字符是否已经存在将字符添加到 map

Java 版本给我一个 "no such file or directory"

Java:对 CMS 垃圾收集器感到困惑

java - 具有一对多关联的 Hibernate 条件

java - 使用 Spring 时,如何在错误 500 页面中打印堆栈跟踪?

java - Hibernate、spring、JPS 和隔离 - 不支持自定义隔离

java - 如何在hibernate注解中实现组件映射

Grails:在另一个闭包中使用多个闭包