如何在Hibernate JPA中处理@OneToMany关联和分页?

时间:2017-04-24 03:55:58

标签: hibernate jpa pagination

我正在使用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

任何帮助将不胜感激。谢谢。

0 个答案:

没有答案