Hibernate映射关联到映射

Hibernate映射关联到映射,hibernate,one-to-many,hibernate-mapping,Hibernate,One To Many,Hibernate Mapping,hibernate的@OneToMany关联如何与java.util.Map类型一起工作?我也使用@MapKey 它是否首先加载查询结果集并遍历以在中创建关联对象 比如,; 我有一辆实体车 我还有另外一个特点 Car与CarFeatures@JoinColumn(“carId”)有一个@OneToMany,FetchType.LAZY关系。还包括带有注释的功能键@MapKey(“键”) 当我想在屏幕上列出所有的汽车,并在列表中列出一些功能时。我正在使用JOIN FETCH生成查询,以选择与car

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

它是否首先加载查询结果集并遍历以在中创建关联对象

比如,; 我有一辆实体车 我还有另外一个特点

Car与CarFeatures@JoinColumn(“carId”)有一个
@OneToMany,FetchType.LAZY
关系。还包括带有注释的功能键
@MapKey(“键”)

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

检查了查询,似乎查询正在从car join with carfeatures中选择
car.*和carfeature.

但是当清单上的汽车数量巨大时;加载结果集花费的时间太多

这就是为什么我想了解幕后发生了什么?就我所知

  • Hibernate触发查询
  • Hibernate获取结果集结果集中的每一行都包含car及其“一”特性。意味着如果一辆车有20个功能。结果集中每辆车将有20行
  • 然后hibernate创建汽车对象,包括地图。执行此操作时,hibernate遍历resultSet并将每个CarFeature与键值放在一起 我的理解正确吗?如果是,我如何有效地选择汽车及其功能

    我计划做的一件事是;跳过features表并创建一列Varchar以手动整理/取消整理features as list

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

    Hibernate以相同的方式加载所有
    @OneToMany
    关联,无论集合类型如何

    它是否首先加载查询结果集并遍历以在中创建关联对象

    是的,没错

    但是当清单上的汽车数量巨大时;加载结果集花费的时间太多

    那是因为你没有使用分页

    检查了查询,似乎查询正在从与carfeatures关联的car中选择car.*和carfeature.*

    是的,这正是JOIN FETCH所做的。它执行连接并投影从正在获取的父关联和子关联的所有内容

    Hibernate获取结果集结果集中的每一行都包含car及其“一”特性。意味着如果一辆车有20个功能。结果集中每辆车将有20行

    对。如果您有N辆车,并且每辆车都有M个特征,那么结果集将包含N x M个记录

    我的理解正确吗?如果是,我如何有效地选择汽车及其功能

    当然,有办法。只需使用分页,如中所述

    我计划做的一件事是;跳过features表并创建一列Varchar以手动整理/取消整理features as list

    这听起来像是一个不需要的黑客。只需使用分页,不要仅针对一个不使用分页的查询对模式进行非规范化,当然,出于这个原因,查询速度很慢

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

    Hibernate以相同的方式加载所有
    @OneToMany
    关联,无论集合类型如何

    它是否首先加载查询结果集并遍历以在中创建关联对象

    是的,没错

    但是当清单上的汽车数量巨大时;加载结果集花费的时间太多

    那是因为你没有使用分页

    检查了查询,似乎查询正在从与carfeatures关联的car中选择car.*和carfeature.*

    是的,这正是JOIN FETCH所做的。它执行连接并投影从正在获取的父关联和子关联的所有内容

    Hibernate获取结果集结果集中的每一行都包含car及其“一”特性。意味着如果一辆车有20个功能。结果集中每辆车将有20行

    对。如果您有N辆车,并且每辆车都有M个特征,那么结果集将包含N x M个记录

    我的理解正确吗?如果是,我如何有效地选择汽车及其功能

    当然,有办法。只需使用分页,如中所述

    我计划做的一件事是;跳过features表并创建一列Varchar以手动整理/取消整理features as list


    这听起来像是一个不需要的黑客。只需使用分页,不要仅为一个不使用分页的查询取消模式规范化,当然,由于这个原因,查询速度很慢。

    再次感谢您的精彩回答,也感谢您的文章链接。但是在这个已经完成了大量工作的项目中;我没有机会,只能按你说的去做。乱劈我唯一的问题;是否可以使用类型实用程序将json转换为列(varchar)。由于DB版本不支持JSON列类型。如果要在VARCHAR中存储JSON数据,只需使用
    String
    entity属性并存储JSON字符串表示形式。回到远古时代。但这就是现在必须做的。我一直计划包括一个可重用的和通用的,因为它可以-这不是现在-。最终,这不是一个产品,而是一个解决方案和客户特定性如果它是客户特定的,那么就没有什么可担心的了。如果它是一个产品,那么您必须编写自己的自定义类型,以将JSON保存到VARCHAR或JSON特定列。如果您研究
    hibrnate类型
    项目,您将了解如何做到这一点。谢谢!经历这一次,;很好,再次感谢你的回答,也感谢你的文章链接。但是在这个已经完成了大量工作的项目中;我没有机会,只能按你说的去做。乱劈我的o