我正在使用 Spring boot jpa 来提取员工详细信息。我的员工实体如下所示,
Employee.java
public class Employee {
private String id;
private String name;
@ManyToOne
@JoinColumn(name = "DEPT_ID", referencedColumnName = "DEPT_ID")
private Department department;
@ManyToOne
@JoinColumn(name = "ADD_ID", referencedColumnName = "ADD_ID")
private Address address;
}
在 Employee Repo 中,当我尝试
List<Employee> findAll()
方法时,它遇到了 N+1 问题,为了解决它,我尝试使用实体图,它解决了这个问题。但我的存储库方法如下所示,
@EntityGraph(attributePaths = {"department", "address"})
List<Employee> findByDepartmentActiveIndOrderByAddressCity(String activeInd);
使用上面的存储库方法,我能够实现所需的功能,但方法名称很大。有没有办法将实体图和 Jpa 规范结合起来。我尝试了加入部门和地址实体的基本 Jpa 规范,但它给了我 N+1 问题。有更好的方法或者有没有办法将实体图与规范结合起来?预先感谢。
您可以使用规格加入:
public static Specification<Author> hasBookWithTitle(String bookTitle) {
return (root, query, criteriaBuilder) -> {
Join<Book, Author> authorsBook = root.join("books");
return criteriaBuilder.equal(authorsBook.get("title"), bookTitle);
};
}