Hibernate 简明教程
Hibernate - O/R Mappings
到目前为止,我们已经看到了使用 hibernate 的非常基本的 O/R 映射,但还有三个非常重要的映射主题,我们必须详细了解。
它们是:
-
Mapping of collections,
-
实体类之间的关联映射,以及
-
Component Mappings.
Collections Mappings
如果实体或类具有针对特定变量的值集合,那么我们可以使用 java 中可用的任何一个集合接口来映射这些值。Hibernate 可以保留 java.util.Map, java.util.Set, java.util.SortedMap, java.util.SortedSet, java.util.List 和任何持久实体或值 array 的实例。
Sr.No. |
集合类型和映射说明 |
1 |
java.util.Set 这与 <set> 元素映射,并使用 java.util.HashSet 初始化 |
2 |
java.util.SortedSet 这与 <set> 元素映射,并使用 java.util.TreeSet 初始化。 sort 属性可以设置为比较器或自然顺序。 |
3 |
java.util.List 这与 <list> 元素映射,并使用 java.util.ArrayList 初始化 |
4 |
java.util.Collection 这与 <bag> 或 <ibag> 元素映射,并使用 java.util.ArrayList 初始化 |
5 |
java.util.Map 这与 <map> 元素映射,并使用 java.util.HashMap 初始化 |
6 |
java.util.SortedMap 这与 <map> 元素映射,并使用 java.util.TreeMap 初始化。 sort 属性可以设置为比较器或自然顺序。 |
Hibernate 使用 <primitive-array>(针对 Java 原始值类型)和 <array>(针对所有其他项)支持数组。但是,它们的使用频率很低,因此我不会在本教程中对它们进行讨论。
如果您想映射 Hibernate 不直接支持的用户自定义集合接口,您需要告知 Hibernate 您自定义集合的语义,但要做到这一点并不容易,也不建议使用。
Association Mappings
实体类之间的关联映射以及表之间的关系是 ORM 的核心。以下是可以表示对象之间关系基数的四种方式。关联映射可以是单向的,也可以是双向的。
Sr.No. |
Mapping type & Description |
1 |
Many-to-One 使用 Hibernate 映射多对一关系 |
2 |
One-to-One 使用 Hibernate 映射一对一关系 |
3 |
One-to-Many 使用 Hibernate 映射一对多关系 |
4 |
Many-to-Many 使用 Hibernate 映射多对多关系 |
Component Mappings
一个实体类很可能可以具有对另一个类的引用作为成员变量。如果被引用类没有自己的生命周期,并且完全依赖于所有实体类生命周期,那么被引用类因此而成为 Component class 。
以类似方式映射集合组件也是可能的,就像映射常规集合,但配置差异很小。我们将详细了解这两个映射,并提供示例。
Sr.No. |
Mapping type & Description |
1 |
Component Mappings 对拥有对另一个类的引用(作为成员变量)的类进行映射。 |