20、高级实体关联映射详解

高级实体关联映射详解

1. 基础总结与建议

在处理新的数据库模式时,有一些实用的建议。如果要构建新的模式,较为简单的做法是不启用数据库级别的级联操作,并且将领域模型中的组合关系映射为嵌入式(embedded/embeddable),而非实体关联。这样 Hibernate 就能执行高效的 SQL DELETE 操作来移除整个组合。

例如,如果可以避免共享引用,可将 Bid 映射为 Item 中的 @ElementCollection,而不是使用 @ManyToOne 和 @OneToMany 关联将其作为独立实体。当然,也可以不映射任何集合,仅使用最简单的映射方式:在 @Entity 类之间使用单向的 @ManyToOne 外键列。

以下是简单集合映射的相关要点总结:
- 使用简单的集合映射,如 Set ,可以接触到丰富的接口和实现。
- 了解排序集合的工作原理,以及 Hibernate 让数据库按期望顺序返回集合元素的选项。
- 探讨了用户自定义可嵌入类型的复杂集合,以及组件的集合、包和映射。
- 学会如何在映射中使用组件作为键和值,以及在可嵌入组件中使用集合。
- 将第一个外键列映射到实体的多对一关联,可使其成为双向的一对多关联,同时也了解了几种级联选项。
- 涵盖了对象/关系映射的关键概念。一旦完成了第一个 @ManyToOne 映射以及可能的简单字符串集合映射,最困难的部分就过去了。
- 务必尝试代码并查看 SQL 日志。

2. 高级实体关联映射概述

之前已经展示了单向多对一关联,将其变为双向关联,并最终通过级联选项启用了传递状态更改。之所以单独讨论更高级的实体