Hibernate 中的集合映射

2024 年 8 月 29 日 | 阅读 3 分钟

我们可以在 Hibernate 中映射持久类的集合元素。您需要从以下类型之一在持久类中声明集合的类型

  • java.util.List
  • java.util.Set
  • java.util.SortedSet
  • java.util.Map
  • java.util.SortedMap
  • java.util.Collection
  • 或编写 org.hibernate.usertype.UserCollectionType 的实现

持久类应定义为集合元素,如下所示。


在映射文件中映射集合

<class> 元素有许多子元素用于映射集合。它们是 <list><bag><set><map>。让我们看看我们如何为上面的类实现列表

列表中使用了三个子元素

  • <key> 元素用于基于 Question 类标识符定义此表中的外键。
  • <index> 元素用于标识类型。 List 和 Map 是索引集合。
  • <element> 用于定义集合的元素。

如果集合存储字符串对象,这就是集合的映射。但是如果集合存储实体引用(另一个类对象),我们需要定义 <one-to-many><many-to-many> 元素。现在持久类将如下所示

现在映射文件将是

在这里,List 通过一对多关系进行映射。在这种情况下,一个问题可以有多个答案。


理解 key 元素

key 元素用于基于原始标识定义连接表中的外键。外键元素默认为可空的。因此,对于不可空的外键,我们需要指定 not-null 属性,例如

key 元素的属性是 column, on-delete, property-ref, not-null, update 和 unique。


索引集合

集合元素可以分为两种形式

  • indexed,和
  • non-indexed

List 和 Map 集合是有索引的,而 set 和 bag 集合是无索引的。在这里,索引集合表示 List 和 Map 需要一个额外的元素 <index>


集合元素

集合元素可以具有值或实体引用(另一个类对象)。我们可以使用 4 个元素中的一个

  • element
  • component-element
  • one-to-many,或
  • many-to-many

element 和 component-element 用于普通值,例如字符串、整数等,而 one-to-many 和 many-to-many 用于映射实体引用。