Hibernate条件示例查询获取多个记录

时间:2013-09-25 12:17:23

标签: mysql hibernate hibernate-criteria

我有一个通用条件查询,它返回相同的记录。我认为我的学生保存方法有问题。这是我的保存方法;

    Student student = new Student();
    student.setId(Utility.generateUUID());
    student.setClassroom(selectedClassroom);
    student.setUrl(urlAddress);
    genericService.save(student);

当我尝试从datatable获取所有Classroom时,它返回3个Classroom对象,它们相同,但在Classroom表中只有一个记录。问题是有3个学生记录,其中教室正在参考这个课堂记录。

我的标准查询;

    @Transactional(readOnly = true)
public <T> List<T> getByTemplate(T templateEntity) {
    Criteria criteria = getCurrentSession().createCriteria(templateEntity.getClass());
    criteria.add(Example.create(templateEntity));
    return criteria.list();
}

实体;

public class Classroom{

    ....
    @OneToMany(mappedBy = "classroom", fetch = FetchType.EAGER)
    private List<Student> studentList;
}


public class Student{

    @JoinColumn(name = "classroom", referencedColumnName = "id")
    @ManyToOne(fetch = FetchType.LAZY)
    private Classroom classroom;
}

1 个答案:

答案 0 :(得分:1)

尝试将以下内容添加到您的条件中:

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

这将为Classroom检索不同的实体,即使是内连接选择将检索三行(每个用户一个)。