#spring-data-jpa
#spring-data-jpa
Вопрос:
Репост отсюда
Данные объекты и репозиторий:
@Entity
public final class Partner {
@Id
private String id;
@OneToMany(mappedBy = "partner", fetch = FetchType.LAZY)
private List<Merchant> merchants;
...
}
@Entity
public final class Merchant {
@Id
private String id;
@Column
private String name;
@ManyToOne(fetch = FetchType.LAZY)
private Partner partner;
...
}
public interface PartnerRepository
extends JpaRepository<Partner, String>, QueryDslPredicateExecutor<Partner> {
}
Если в базе данных есть только один партнер, имеющий двух продавцов, то следующий код неверно возвращает список с двумя экземплярами одного и того же участника.
partnerRepository.findAll(new Sort("merchants.name"));
Это вызвано внутренним объединением БД. При создании пользовательской реализации, которая добавляет различие к выбору, результат будет правильно единственным партнером.
Разве не было бы правильно делать отдельный выбор по умолчанию?
Комментарии:
1. возможно, вы пропустили порядок сортировки
desc
илиasc
здесь:new Sort("merchants.name")
2. @user404 да, он по-прежнему получает дублированные записи.
Ответ №1:
Попробуйте
@OneToMany(mappedBy = "partner", fetch = FetchType.LAZY)
@OrderBy("name")
private List<Merchant> merchants;