Spring Data JPA按OneToMany关系中的值排序

3

我正在尝试通过嵌套集合元素的值来排序结果。我有一个非常简单的模型:

@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> {
}

我希望能够按照一个设置的值返回排序结果。 使用Spring Data JPA和QueryDSL,是否可以按照user.settings.value并且满足settings.name = 'SampleName'进行排序?

1个回答

0

我使用了JpaSpecificationExecutor,让我们以findAll为例。

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

在调用此方法之前,您可以动态创建规范(where条件)和带有动态排序信息的Pageable对象。

例如:

...

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

但并不总是我想按此字段排序 - 有时是另一个字段。 - Adam
但是如何创建一个sortByProperty来按user.setting.name排序? - Adam
Sort.Order.asc("setting.name") - ValerioMC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接