【问题标题】:JPA Hibernate query vs Native queryJPA Hibernate 查询与本机查询
【发布时间】:2019-12-03 05:16:02
【问题描述】:

我使用Spring Data JPA (hibernate) 生成的查询从我的Sqlserver 获取数据。现在我在我的系统中遇到了与性能相关的问题。

加载 findByLoadId(Integer loadId);

这是我用来获取数据的查询。此查询返回 25 个单元格数据,但我只使用其中的 5 个数据。

我可以直接使用原生查询吗

选择 id,date,createdBy,createdOn,loadName from Load where loadId=:loadId

但如果本机查询是可建议的,那么我会遇到类似ORM 框架是否会通过从数据库中获取不需要的数据来降低性能

【问题讨论】:

  • 我是说列作为单元格数据

标签: java hibernate spring-boot spring-jdbc


【解决方案1】:

通过“数据单元格”,我假设您指的是数据库表列,而不是记录。您的问题的答案是,是的,ORM 框架可能倾向于在后台执行 SELECT *,这可能会导致不需要的信息通过网络发送到您的应用程序。如果 JPA 存储库接口以这种方式运行,您可以切换到显式 JPA 查询(例如,使用 @Query 注释),甚至是本机查询。然后,只需选择所需的列。这里的问题是 ORM 框架将对象模板(例如类)映射到整个数据库表。因此,实体的概念隐含地包括每个数据库列。如果您选择仅选择某些列,您可能需要在 Java 方面进行一些调整。请注意,如果使用 JPA 查询,理论上您的代码仍然是独立于数据库的。

【讨论】:

  • 而仅包含少数字段的 Spring Data 投影只会选择那些。
  • @chrylis-onstrike- 你的罢工与莫妮卡事件有关吗?
  • 我不是说不是。
猜你喜欢
  • 2014-06-19
  • 2021-12-14
  • 2014-11-11
  • 2016-11-02
  • 2012-10-09
  • 2011-03-09
  • 2017-06-04
  • 1970-01-01
  • 2015-03-14
相关资源
最近更新 更多