我使用Spring Data JPA (hibernate)
生成的查询从Sqlserver
中获取数据。现在我在我的系统中得到了与性能相关的问题。
Load findByLoadId(整数loadId);
这是我用来获取数据的查询。此查询返回25个单元格数据,但我只使用其中的5个数据。
我是否可以使用直接本机查询,例如
从Load where loadId=:loadId中选择id、date、createdBy、createdOn、loadName
但是,如果本机查询是可暗示的,那么我有一个类似于的问题,即ORM frameWork是否通过从数据库获取不必要的数据来降低性能?
发布于 2019-12-03 05:21:39
通过“数据单元格”,我假设您指的是数据库表列,而不是记录。您的问题的答案是,是的,ORM框架可能只是在幕后执行一个SELECT *
,这可能导致不必要的信息通过网络发送到您的应用程序。如果JPA存储库接口是这样的,那么您可以切换到显式JPA查询(例如使用@Query
注释),甚至切换到本机查询。然后,只需选择所需的列。这里的问题是ORM框架将对象模板(例如类)映射到整个数据库表。因此,实体的概念隐式地包括每个数据库列。如果选择只选择某些列,则可能需要在Java端执行一些杂耍操作。注意,如果使用JPA查询,理论上您的代码仍然是独立于数据库的。
https://stackoverflow.com/questions/59150562
复制相似问题