Spring Boot jpa与实体图相结合

问题描述 投票:0回答:1

我正在使用 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 问题。有更好的方法或者有没有办法将实体图与规范结合起来?预先感谢。

java spring-boot spring-data-jpa
1个回答
0
投票

您可以使用规格加入:

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);
    };
}
© www.soinside.com 2019 - 2024. All rights reserved.