У меня есть две сущности. Один из них является дочерним по отношению к другому с 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)