我有两个实体。其中一个是另一个的子级,并且与 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 c from Company c WHERE c.companyName LIKE CONCAT('%',:text,'%') or (SELECT e from c.employees e WHERE e.firstName LIKE CONCAT('%',:text,'%') OR e.lastName LIKE CONCAT('%',:text,'%'))”)
List<Company> findByText( @Param(“text” String text)
最佳答案
我认为您所需要的只是这里的左连接:
@Query(value = “SELECT 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,'%')”)
关于java - 如何创建同时在主表行和具有 OneToMany 关系的子行中进行搜索的 JPA 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56948396/