ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 6.2.3\. 索引集合类(Indexed collections) 所有的集合映射,除了set和bag语义的以外,都需要指定一个集合表的_索引字段(index column)_——用于对应到数组索引,或者`List`的索引,或者`Map`的关键字。通过`&lt;map-key&gt;`,`Map` 的索引可以是任何基础类型;若通过`&lt;map-key-many-to-many&gt;`,它也可以是一个实体引用;若通过`&lt;composite-map-key&gt;`,它还可以是一个组合类型。数组或列表的索引必须是`integer`类型,并且使用 `&lt;list-index&gt;`元素定义映射。被映射的字段包含有顺序排列的整数(默认从0开始)。 ``` <map-key column="column_name" formula="any SQL expression" type="type_name" node="@attribute-name" length="N"/> ``` | ![1](img/1.png) | `column`(可选):保存集合索引值的字段名。 | |:--- |:--- | | ![2](img/2.png) | `formula` (可选): 用于计算map关键字的SQL公式 | | ![3](img/3.png) | `type` (必须):映射键(map key)的类型。 | ``` <map-key-many-to-many column="column_name" formula="any SQL expression" class="ClassName" /> ``` | ![1](img/1.png) | `column`(可选):集合索引值中外键字段的名称 | |:--- |:--- | | ![2](img/2.png) | `formula` (可选): 用于计算map关键字的外键的SQL公式 | | ![3](img/3.png) | `class` (必需):映射的键(map key)使用的实体类。 | 假若你的表没有一个索引字段,当你仍然希望使用`List`作为属性类型,你应该把此属性映射为Hibernate _&lt;bag&gt;_。从数据库中获取的时候,bag不维护其顺序,但也可选择性的进行排序。 从集合类可以产生很大一部分映射,覆盖了很多常见的关系模型。我们建议你试验schema生成工具,来体会一下不同的映射声明是如何被翻译为数据库表的。