hibernate的@OneToMany关联是如何与java.util.Map类型一起工作的?我也使用@MapKey。
它是否首先加载查询resultSet并遍历以在其中创建关联对象?
例如,我有一个实体车,我有另一个实体CarFeatures
Car与CarFeatures @JoinColumn("carId")有一个CarFeatures @JoinColumn("carId")关系。还包括一个带有注释@MapKey("KEY")的特性键。
当我想列出所有的汽车在一个屏幕上,并在列表中的一些功能。我正在生成带有JOIN的查询,以选择与car相关的所有功能。
选中该查询,该查询似乎是从car中选择car.* and carfeature.*与carfeatures连接。
但是,当汽车的数量很大的时候,需要花费太多的时间来加载结果集。
所以我才想了解幕后的情况?尽我所能追随;
我的理解正确吗?如果是这样的话,我如何有效地选择汽车和它们的特点?
我计划做的一件事是:跳过features表并创建一个Varchar列,手动将这些特性作为列表传递/unmarshall。
发布于 2019-12-22 17:08:00
hibernate的@OneToMany关联是如何与java.util.Map类型一起工作的?我也使用@MapKey。
Hibernate以相同的方式加载所有@OneToMany关联,而不管集合类型如何。
它是否首先加载查询resultSet并遍历以在其中创建关联对象?
是的,这就对了。
但是,当汽车的数量很大的时候,需要花费太多的时间来加载结果集。
那是因为你没有使用分页。
检查了查询,似乎查询正在选择car.*和carfeature.*从car中加入了特征。
是的,这正是JOIN所做的。它执行连接,并从正在获取的父关联和子关联中生成所有内容。
Hibernate获取resultSet结果集中的每一行包含car及其“一个”特性。意思是如果一辆车有20个功能。结果集中每辆车将有20行。
是。如果你有N辆汽车,每辆车都有M个特征,那么结果集将包含N记录。
我的理解正确吗?如果是这样的话,我如何有效地选择汽车和它们的特点?
当然,有个办法。只需使用分页,如这篇文章中所解释的那样。
我计划做的一件事是:跳过features表并创建一个Varchar列,手动将这些特性作为列表传递/unmarshall。
听起来像是不需要的黑客攻击。只需使用分页,不要仅为不使用分页的单个查询而对模式进行去denormalize,因此,当然是缓慢的。
https://stackoverflow.com/questions/59446259
复制相似问题