首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring Data JPA Native Query N+1问题

Spring Data JPA Native Query N+1问题
EN

Stack Overflow用户
提问于 2021-09-10 11:42:42
回答 1查看 366关注 0票数 1

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

我们有第一个实体:

代码语言:javascript
运行
复制
@Data
@Entity
@Table(name = "Info")
public class Info {

@OneToOne
@JoinColumn(name = "data_id")
private Data data;
    
}

第二个:

代码语言:javascript
运行
复制
@Data
@Entity
@Table(name = "Data")
public class Data {

@Id
private Long dataId
    
}

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

代码语言:javascript
运行
复制
 @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并检索我的数据。但是如果我看一下日志,实际上有两个选择:

代码语言:javascript
运行
复制
SELECT * FROM Info i inner join Data d on d.data_id=i.data_id;

SELECT * FROM Data d where d.data_id = 123;

为什么会发生这种情况?如何修复它,使之只有一次选择并检索所有数据?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-13 14:22:59

如果没有Hibernate specific APIs,就不可能指定原生查询获取。我建议您使用普通的JPQL/HQL查询:

代码语言:javascript
运行
复制
@Query(value = "FROM Info i join fetch i.data")
List<Info> getInfo();

这将与原生查询执行相同的操作,但同时只运行一个查询。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69131690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档