JPA данных Spring упорядочен по значению из отношения OneToMany - PullRequest
2 голосов
/ 11 июня 2019

Я пытаюсь отсортировать результат по значению вложенного элемента коллекции. У меня очень простая модель:

@Entity
public class User {

    @Id
    @NotNull
    @Column(name = "userid")
    private Long id;

    @OneToMany(mappedBy = "user")
    private Collection<Setting> settings = new HashSet<>();

    // getters and setters
}

@Entity
public class Setting {

    @Id
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "userid")
    private User user;

    private String key;
    private String value;

    // getters and setters
}

public interface UserRepository extends JpaRepository<User, Long>, QuerydslPredicateExecutor<User> {
}

Я хочу, чтобы возвращаемый результат был отсортирован по значению одного параметра. Можно ли заказать по user.settings.value, где settings.name = 'SampleName', используя Spring Data JPA с QueryDSL?

1 Ответ

0 голосов
/ 11 июня 2019

Я использовал JpaSpecificationExecutor.давайте посмотрим findAll, например.

Page<T> findAll(@Nullable Specification<T> spec, Pageable pageable);

Перед вызовом этого метода вы можете создать свою спецификацию динамически (где условие) и Pageable объект с динамической Sort информацией.

Дляпример

...

Specification<T> whereSpecifications = Specification.where(yourWhereSpeficiation);
Sort sortByProperty = Sort.by(Sort.Order.asc("property"));
PageRequest orderedPageRequest = PageRequest.of(1, 100, sortByProperty);

userRepository.findAll(whereSpecifications, PageRequest.of(page, limit, orderedPageRequest));
...