Пример запроса критерия гибернации получает несколько записей

У меня есть общий запрос критериев, и он возвращает те же записи. Я думаю, что что-то не так с моим методом сохранения. Вот мой метод сохранения;

    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);

Это приведет к извлечению отдельных объектов для класса, даже при условии, что при выборе внутреннего соединения будут получены три строки (по одной на пользователя).

Другие вопросы по тегам