Hibernate能否实现类似MyBatis的一对多关联集合自动映射功能?
Hibernate 完全支持同类自动聚合映射功能
作为全自动化ORM框架,Hibernate对这种父子关联实体的自动映射、结果聚合的支持是原生自带的,配置和使用比MyBatis更简化:
基础配置方式
- 首先在实体类中声明关联关系即可,无需单独配置类似resultMap的映射规则:
- 1端Account实体的集合属性上添加
@OneToMany(mappedBy = "account")注解 - 多端Address实体的Account属性上添加
@ManyToOne注解,并指定外键对应AccountId字段
- 1端Account实体的集合属性上添加
实际查询效果
你提到的场景下(1条Account记录对应2条关联Address记录),只要执行带关联抓取的查询,就能拿到和MyBatis完全一致的聚合结果:
- 如果写HQL查询:
from Account a left join fetch a.addresses where a.id = :accountId - 如果用原生SQL查询,只要做好结果映射配置
Hibernate拿到2行关联查询的结果集后,会自动根据主键去重,把2条Address记录自动封装为Address实例,注入到Account对象的addresses集合属性中,最终返回1个组装完成的Account实例,全程不需要开发者手动处理结果的遍历、聚合、组装逻辑。
额外特性补充
如果配置了关联属性的抓取策略为FetchType.EAGER,甚至不需要手动写join语句,直接调用session.get(Account.class, accountId),Hibernate会自动生成关联查询语句,完成结果聚合后直接返回嵌套的实体对象。
要注意的是如果使用默认的懒加载策略(FetchType.LAZY),集合属性会在首次访问时才触发查询,但查询完成后的聚合逻辑依然是自动完成的,不需要手动处理。
内容的提问来源于stack exchange,提问作者AVV
相关产品推荐
相关产品推荐

