дублирование результатов при сортировке по свойству коллекции

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