我有2个实体。第一个是
public class TechnicalDataItem {
@EmbeddedId
private ItemLabelId id;
Id类是:
public class ItemLabelId implements Serializable {
@Column(name = "ID")
private String id;
@ManyToOne
@JoinColumn(name = "TECHNICAL_LABEL_ID")
@Fetch(FetchMode.JOIN)
private TechnicalLabel technicalLabel;
与@ManyToOne关系
public class TechnicalLabel {
@Id
private Long id;
@Basic
private String name;
@Basic
private String value;
当我尝试通过调用
从TechnicaDataItem加载所有数据时technicalDataItemRepository.findAll()
我有一堆选择,负载很慢。不应该有加入,只有一个选择?我错过了什么吗?
technicalDataRepository是JpaRepository。
答案 0 :(得分:2)
根据关系定义,您遇到了N + 1查询问题。默认情况下,JPA将执行多个选择以拉取子关系项。
您有TechnicalDataItem
的一个选择,然后是TechnicalLabel
的另外N个选择。
要绕过其他N个查询,请使用join fetch
的{{1}}方法findAll
。{/ p>
这是一个相同的例子。
technicalDataItemRepository
希望这有帮助。