【发布时间】:2018-09-13 08:53:06
【问题描述】:
我正在使用 Spring Boot 应用程序,并且存在以下 2 个实体。
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 进行排序。排序顺序(ASC 或 DESC)来自前端。
知道Pageable 对象应该如何实现这个吗?如果Person 存在多个Address,也不会返回任何重复的Person 记录。
【问题讨论】:
-
Spring Data JPa 有很多非常有效的特性,但并不是万能的。您必须创建一个唯一的查询...或规范,因为您可以将它与 Pageable 一起使用。
标签: java spring spring-boot spring-data-jpa