JPA规范-使用关系OneToMany

时间:2019-07-11 14:29:04

标签: spring-boot jpa

我有两个实体。其中一个是另一个与OneToMany有关系的孩子。是否可以在主要实体和所有子实体中实施同时查找的搜索条件?

示例:我的公司有很多员工。如果我搜索某些文本,则要检索所有公司,这些公司的标题包含该文本,或者其雇员姓名包含该文本。

以下是示例实体:

@Entity
public class Company extends AbstractEntity {
    @Column(nullable = false, unique = true)
    private String uuid;

    @Column(nullable = false)
    private String companyName;

    @OneToMany(mappedBy = “company”, cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
    protected Set<Employee> employees = new HashSet<>();

}

@Entity
public class Employee extends AbstractEntity {
    @Column(nullable = false, unique = true)
    private String uuid;

    @Column(nullable = false)
    private String firstName;

    @Column(nullable = false)
    private String lastName;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = “company_id”, nullable = false)
    @OnDelete(action = OnDeleteAction.CASCADE)
    private Company company;
}

这是示例查询,我想将其转换为“规范”条件

@Query(value = “SELECT DISTINCT c from Company c left outer join c.employees e 
            WHERE c.companyName LIKE CONCAT('%',:text,'%') 
              or e.firstName  LIKE CONCAT('%',:text,'%')  
              or  e.lastName  LIKE CONCAT('%',:text,'%')”)

1 个答案:

答案 0 :(得分:0)

如果您使用的是Spring JPA数据存储库,则您的接口方法将如下所示。

Company findByCompanyNameConatainingOrEmployeesFirstNameConatainingOrEmployeeslastNameConataining(String searchTextCompanyTitle, String searchTextEmployeeFName, String searchTextEmployeeLName);

如果您不使用数据存储库,请解释您的数据访问设计以获取准确的答案。