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