我正在使用 Spring Boot 应用程序,存在以下 2 个实体。
Person.java
我正在使用以下的
我使用以下语句来实现分页和排序。
Person.java
@Entity
@Data
@EqualsAndHashCode(callSuper = true)
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "PERSON")
public class Person extends BaseEntity {
@NotNull
@Enumerated(EnumType.STRING)
private StatusType status;
@JsonIgnore
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
name = "PERSON_ADDRESS",
joinColumns = @JoinColumn(
name = "person_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(
name = "address_id", referencedColumnName = "id"))
private Collection<Info> addresses;
}
Address.java
@Entity
@Data
@EqualsAndHashCode(callSuper = true)
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "ADDRESS")
public class Address extends BaseEntity {
@NotNull
private String address;
@ManyToMany(mappedBy = "addresses")
private Collection<Person> persons;
}
我正在使用以下的
JpaRepository
。@Repository
public interface PersonRepository extends JpaRepository<Person, Long> {
}
我使用以下语句来实现分页和排序。
Page<Person> allPersons = personRepository.findAll(pageable);
其中,pageable
是 org.springframework.data.domain.Pageable
的实例。
我能够使用 Person
中的其他列进行排序。但是我想基于地址集合对其进行排序,即根据每个 Person
实体的 Address
记录数量进行排序。
简而言之,我想基于 Collection 的大小对 Persons 进行排序。排序顺序(升序或降序)来自前端。
有没有想法如何实现此功能的 Pageable
对象?同时,如果一个 Person
存在多个 Address
,则不返回任何重复的 Person
记录。