我正在使用Hibernate JPA 2.1版本。在其中一个实体中使用@OneToMany关联,该关联与另一个具有Collection(Set)的实体关联。
Person Entity
@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany(mappedBy = "**phone**", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<Phone> phone;
并在另一个实体中使用@ManyToOne关联,如下所示:
Phone entity
@ManyToOne
@JoinColumn(name = "PHONE_ID", nullable = false)
private Phone **phone**;
现在,手机与另一个名为Operator的实体相关,该实体与Phone实体的@ManyToOne关联如下所示。
Operator entity
@ManyToOne
@JoinColumn(name = "OPERATOR_ID", referencedColumnName = "OPERATOR_ID", nullable = false)
private Operator operator;
这3个是我正在使用的实体。
现在我想搜索运营商名称,以便与该特定运营商关联的特定搜索人员记录应该到来。在查询下面使用。
@Query(value = "select aud from Person person "
+ "inner join person.phone perph "
+ "inner join perph.operator phoper where (:partnerName is null or phoper.partnerName = :partnerName) ")
Page<Person> search(@Param("partnerName") String partnerName, Pageable pageinfo)
但结果是所有运营商的结果(例如:如果运营商是AAA,BBB和CCC并且我搜索了AAA,则所有3个结果都会进入private Set<Phone> phone
。
我也希望将它与可分页请求(用于分页)一起使用。
已使用join fetch query
。它将获取精确的一个,但这不会发生分页。
所以我必须只使用内部联接来帮助分页。
Inner join
将获取3个Person
对象,而这些对象又包含3个元素集(Set<Phone> phone
)。
示例:
Person1--[*****1, *****2, *****3]
Person1--[*****1, *****2, *****3]
Pesron1--[*****1, *****2, *****3]
我希望3个人对象与单个电话元素。
Person1--*****1
Person1--*****2
Pesron1--*****3
任何帮助将不胜感激。谢谢。