Как получить отдельные записи сущности A, имеющие связь от одного до многих с другой сущностью B, отсортированной по максимуму последней метки времени записей B

#java #sorting #jpa #pagination #repository

Вопрос:

У меня есть 2 сущности, определенные, как показано ниже, имеющие от одной до многих ассоциаций от a до b.

 public class aEntity {
    @Id
    @Column(name = "id")
    private Long id;

    @Column(name = "user_id")
    private Long userId;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "a", orphanRemoval = true, cascade = CascadeType.ALL)
    private Set<bEntity> b;
}

public class bEntity {
    @Id
    @Column(name = "id")
    private Long id;

    @Column(name = "created_ts")
    private Instant createdTimestamp;

    @ManyToOne(fetch= FetchType.LAZY, optional=false)
    @JoinColumn(name="a_id", foreignKey = @ForeignKey(name = "fk_b_a"))
    @NotNull
    private aEntity a;
}

@Validated
public interface aRepository
    extends JpaRepository<aEntity, Long>, JpaSpecificationExecutor<aEntity> {
}
 

У меня есть требование, чтобы все элементы(постраничные) были отсортированы по максимуму последней отметки времени их соответствующих элементов.

Попробовал нижеприведенный подход

 Sort sort =  Sort.by(Sort.Direction.DESC, "b.updatedTimestamp");
PageRequest pageRequest = PageRequest.of(page, MESSAGES_PER_PAGE, sort);
aRepository.findAll(pageRequest);
 

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