我有两个实体。其中一个是另一个与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,'%')”)
答案 0 :(得分:0)
如果您使用的是Spring JPA数据存储库,则您的接口方法将如下所示。
Company findByCompanyNameConatainingOrEmployeesFirstNameConatainingOrEmployeeslastNameConataining(String searchTextCompanyTitle, String searchTextEmployeeFName, String searchTextEmployeeLName);
如果您不使用数据存储库,请解释您的数据访问设计以获取准确的答案。