Пример запроса критерия гибернации получает несколько записей
У меня есть общий запрос критериев, и он возвращает те же записи. Я думаю, что что-то не так с моим методом сохранения. Вот мой метод сохранения;
Student student = new Student();
student.setId(Utility.generateUUID());
student.setClassroom(selectedClassroom);
student.setUrl(urlAddress);
genericService.save(student);
Когда я пытаюсь получить все классы из таблицы данных, он возвращает 3 объекта класса, которые совпадают, но в таблице классов есть только одна запись. Проблема в том, что есть 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 ответ
Решение
Попробуйте добавить следующее к вашим критериям:
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
Это приведет к извлечению отдельных объектов для класса, даже при условии, что при выборе внутреннего соединения будут получены три строки (по одной на пользователя).