Spring Data JPA Native Query N + 1 problem



我遇到了一些行为对我来说不清楚的代码。

有第一个实体:

@Data
@Entity
@Table(name = "Info")
public class Info {
@OneToOne
@JoinColumn(name = "data_id")
private Data data;

}

和第二个:

@Data
@Entity
@Table(name = "Data")
public class Data {
@Id
private Long dataId

}

我们有下一个检索数据的方法:

@Query(value = "SELECT * FROM Info i inner join Data d on d.data_id=i.data_id", 
nativeQuery = true)
List<Info> getInfo() {}

由于nativeQuery = true是存在的,我希望这个方法只做一个SQL选择和检索我的数据。但是如果我看一下日志实际上有两个选择:

SELECT * FROM Info i inner join Data d on d.data_id=i.data_id;
SELECT * FROM Data d where d.data_id = 123;

为什么会这样?如何修复它,使只有一个选择和检索所有的数据?

如果没有Hibernate特定的api,就不可能指定本机查询获取。我建议您使用正常的JPQL/HQL查询:

@Query(value = "FROM Info i join fetch i.data")
List<Info> getInfo();

这将做同样的本地查询,但同时只运行一个查询。

最新更新