首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate映射到映射

Hibernate映射到映射
EN

Stack Overflow用户
提问于 2019-12-22 16:59:14
回答 1查看 137关注 0票数 1

hibernate的@OneToMany关联是如何与java.util.Map类型一起工作的?我也使用@MapKey。

它是否首先加载查询resultSet并遍历以在其中创建关联对象?

例如,我有一个实体车,我有另一个实体CarFeatures

Car与CarFeatures @JoinColumn("carId")有一个CarFeatures @JoinColumn("carId")关系。还包括一个带有注释@MapKey("KEY")的特性键。

当我想列出所有的汽车在一个屏幕上,并在列表中的一些功能。我正在生成带有JOIN的查询,以选择与car相关的所有功能。

选中该查询,该查询似乎是从car中选择car.* and carfeature.*与carfeatures连接。

但是,当汽车的数量很大的时候,需要花费太多的时间来加载结果集。

所以我才想了解幕后的情况?尽我所能追随;

  1. Hibernate触发查询。
  2. Hibernate获取resultSet结果集中的每一行包含car及其“一个”特性。意思是如果一辆车有20个功能。结果集中每辆车将有20行。
  3. 然后hibernate创建汽车对象,包括Map。在执行此操作时,hibernate遍历resultSet并将每个CarFeature放入键值。

我的理解正确吗?如果是这样的话,我如何有效地选择汽车和它们的特点?

我计划做的一件事是:跳过features表并创建一个Varchar列,手动将这些特性作为列表传递/unmarshall。

EN

回答 1

Stack Overflow用户

发布于 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,因此,当然是缓慢的。

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

https://stackoverflow.com/questions/59446259

复制
相关文章

相似问题

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