我试图了解如何避免从关系@OneToMany中获取数据的许多查询。从性能的Angular 来看,左连接两个表要快得多。
@Table(name = "company")
public class Company
{
@Id
@Column(name = "id")
private Long id;
@Column(name = "name")
private String name;
@OneToMany(mappedBy = "company", fetch = FetchType.EAGER)
private List<Employee> employees = new ArrayList<>();
...
}
@Table(name = "employee")
public class Employee
{
@Id
@Column(name = "id")
private Long id;
@ManyToOne(optional = false)
@JoinColumn(name = "id", nullable = false)
private Company company;
@Column(name = "name")
private String name;
...
}
从公司实体提取数据将创建
- 1从COMPANY表中获取数据的查询
- 从EMPLOYEE表中提取每个雇员的数据的多个查询
我读到:
- 使用条件API可以强制使用JOIN
- 使用Hibernate注解@Fetch(FetchMode.JOIN)
有没有其他方法可以保留Spring Data层?
1条答案
按热度按时间odopli941#
您可以在实体类和存储库上分别使用
@NamedEntityGraph
和@EntityGraph
注解来指导JpaRepository查询策略。