Hibernate如何保存结合属性?
Hibernate会将集合属性中的内容保存在一个从表中,并通过外键列与主表相关联。
映射集合属性的元素
<primitive-array/>:专门用于映射byte、short、int、long等基本数据类型的数组,不能用来映射Integer等包装类型
<array/>:用于映射数组集合属性
<list/>:用于映射list集合属性
<set/>:用于映射set集合属性
<map/>:用于映射map集合属性
<bay/>:用于映射无序集合
<idbag/>:用于映射无需集合,但为集合增加逻辑次序
外键列
因为集合属性都需要保存到另一个数据表中,所以保存集合属性的数据表必须包含一个外键列,用于参照到主表的主键列。
该外键列通过在<set/>、<list/>等元素中使用<key/>子元素来映射。
<key column="foreign_id" not-null="true" on-delete="noaction" unique="true" update="true" foreign-key="" property-ref=""/>
column:外键字段的列名
not-null:指定外键列是否具有非空约束
on-delete:指定外键列约束是否打开数据库级别的级联删除
unique:指定外键列是否具有唯一性约束
foreign-key:暂不清楚
property-ref:暂不清楚
索引列
在java中,List、数组使用整数作为集合元素的索引值,Map使用key作为索引值(key可以是基本数据类型、String、Date,也可以是自定义类型),所以在从表中存储数组、List、Map集合元素的同时,还必须存储一个索引列。
Set集合是无序的,没有显示的索引值,所以存储Ser集合时,无需存储索引列。
List、数组的索引列:
<list-index column="list_index" base="1"/>
column:索引列的名称
base:索引列的起始值
Map的索引列:
集合元素的类型
集合元素是基本数据类型及其包装类型、String、Date时,使用<element/>元素映射
<element column="str" type="string"/>
column:数据列的名称
type:集合元素的类型,只能是基本数据类型及其包装类型、String、Date
集合元素是复合类型时,使用<composite-element/>元素映射,该元素与<component/>元素的用法非常相似。
<composite-element/>中可以映射的数据类型
1、使用<property/>元素映射基本数据类型及其包装类型、String、Date
具体使用请参见《Hibernate映射文件之映射普通属性》
2、使用<nested-composite-element/>元素映射组件属性
3、使用<many-to-one/>来映射关联关系
请参见《Hibernate映射文件之关联关系映射》
集合元素是其他持久化对象的引用时,使用<one-to-many/>或<many-to-many/>元素映射
参见《Hibernate映射文件之关联关系映射》
1、用<primitive-array/>映射基本数据类型的数组
注意:此处的基本数据类型不包括基本数据类型的包装类型
<primitive-array name="primitiveArray" table="primitive_array"> <key column="foreign_id" not-null="true"/> <list-index column="list_index" base="1"/> <element column="number" type="java.lang.Integer"/> </primitive-array>
2、用<array/>映射任意类型的数组
1)、数组元素为基本数据类型及其包装类型、String类型、Date类型
<array name="intArray" table="int_array"> <key column="foreign_id"/> <list-index column="array_index"/> <element column="number" type="java.lang.Integer"/> </array>
<array name="strArray" table="str_array"> <key column="foreign_id"/> <list-index column="array_index"/> <element column="str" type="string"/> </array>
<array name="dateArray" table="date_array"> <key column="foreign_id"/> <list-index column="array_index"/> <element column="date_time" type="timestamp"/> </array>
2)、数组元素为组件
3)、数组元素为其他持久化对象
请参见《Hibernate映射文件之关联关系映射》
3、用<list/>映射List集合属性
1)、数组元素为基本数据类型及其包装类型、String类型、Date类型
<list name="intList" table="int_list" lazy="false"> <key column="foreign_id"/> <list-index column="list_index"/> <element column="number" type="java.lang.Integer"/> </list>
<list name="strList" table="str_list" lazy="false"> <key column="foreign_id"/> <list-index column="list_index"/> <element column="str" type="string"/> </list>
<list name="dateList" table="date_list" lazy="false"> <key column="foreign_id"/> <list-index column="list_index"/> <element column="date_time" type="timestamp"/> </list>
2)、集合元素为组件
3)、集合元素为其他持久化对象
请参见《Hibernate映射文件之关联关系映射》
4、用<set/>映射Set集合属性
1)、数组元素为基本数据类型及其包装类型、String类型、Date类型
<set name="intSet" table="int_set" lazy="true"> <key column="foreing_id"/> <element column="number" type="integer"/> </set>
<set name="strSet" table="str_set" lazy="true"> <key column="foreign_id"/> <element column="str" type="string"/> </set>
<set name="dateSet" table="date_set" lazy="true"> <key column="foreign_id"/> <element column="date_time" type="timestamp"/> </set>
2)、集合元素为组件
3)、集合元素为其他持久化对象
请参见《Hibernate映射文件之关联关系映射》
5、用<map/>映射Map集合属性
1)、数组元素为基本数据类型及其包装类型、String类型、Date类型
<map name="intMap" table="int_map"> <key column="foreign_id"/> <map-key column="map_key" type="integer"/> <element column="number" type="integer"/> </map>
<map name="strMap" table="str_map"> <key column="foreign_key"/> <map-key column="map_key" type="string"/> <element column="str" type="string"/> </map>
<map name="dateMap" table="date_map"> <key column="foreign_id"/> <map-key column="map_key" type="string"/> <element column="date_time" type="timestamp"/> </map>
2)、集合元素为组件
3)、集合元素为其他持久化对象
请参见《Hibernate映射文件之关联关系映射》
相关推荐
在Java持久化框架Hibernate中,映射集合属性是常见的需求,特别是对于那些具有一对多、多对多关系的实体对象。这里的"List"是Java集合框架中的一个接口,用于存储一组有序的元素,而在Hibernate中,它常用来映射...
【标题】"Hibernate映射文件结构"涉及到的是Java持久化框架Hibernate的核心概念,它用于将对象与数据库表之间的关系进行定义。映射文件是Hibernate工作的重要组成部分,它们以XML格式编写,通常命名为`.hbm.xml`,并...
### 深入理解Hibernate...总之,Hibernate映射文件是实现对象关系映射的核心组件之一,通过对映射文件的合理配置,可以高效地完成Java对象与数据库表之间的映射,从而简化数据库操作并提高代码的可维护性和可扩展性。
在Java的持久化框架Hibernate中,集合映射是将数据库中的表关系映射到对象的集合属性上,以便更好地管理和操作数据。这篇文章将深入探讨Hibernate中的集合映射机制,包括其基本概念、类型以及如何在实际开发中进行...
在Java的持久化框架Hibernate中,集合映射是将数据库中的表关系映射到对象的集合属性上,以便实现对象关系映射(ORM)。本文将深入探讨Hibernate中的四种主要集合映射类型:Set、List、Array和Map,以及它们在实际...
对于"student与Score的Map集合关系",在Hibernate配置文件中,我们需要定义两个实体(Student和Score),并在Student实体中声明一个Map类型属性,用于存储Score对象。映射关系可以通过`@OneToMany`和`@ManyToOne`...
在Hibernate的XML映射文件(hbm.xml)或使用JPA的注解中,我们需要指定集合的类型、元素类型、关联字段等信息: ```xml ``` 或者使用注解: ```java @Entity public class User { @OneToMany(mappedBy =...
`hibernate-mapping`节点是Hibernate映射文件中的顶级节点,用于定义一系列配置选项,控制整个映射文件的行为和映射规则。这些配置包括数据库连接细节、默认的映射策略等。 - **schema**: 定义了数据库的Schema名称...
Hibernate作为Java领域中的一款强大持久化框架,其核心功能之一就是对象关系映射(ORM),使得开发者可以方便地在Java对象与数据库表之间进行交互。其中,集合映射是Hibernate中非常关键的概念,它允许我们将数据库...
综上所述,"Hibernate映射配置实例大全"涵盖的内容广泛,包括基本的配置文件设置、实体类的XML和注解映射、集合映射、加载策略、事务管理和缓存配置等。通过深入学习和实践这些实例,开发者可以熟练地运用Hibernate...
在Java编程中,枚举类型(Enum)是一种强大的工具,它可以提供固定的、预定义的值集合,常用于表示有限数量的状态或选项。在关系数据库中,我们可能也需要将这些枚举值存储为列的特定类型。Hibernate,作为Java中...
### 用Hibernate映射继承关系 #### 14.1 继承关系树的每个具体类对应一个表 在Hibernate中映射继承关系时,一种常见的策略是将继承关系树的每个具体类映射到单独的数据库表中。这种方法称为**表/类映射**(Table/...
- **单向**:在一方的映射文件中,使用 `<set>` 标签定义一个集合属性,`<key>` 标签指明外键列,`<one-to-many>` 指定被引用的实体类。例如,班级(Classes)与学生(Student)的关系。 - **双向**:除了在一方的...
1. **映射文件**:在Hibernate的XML映射文件(.hbm.xml)中,bag集合的配置可能会如下所示: ```xml ``` 这里,`propertyName`是Java对象中的集合属性名,`inverse="true"`表示子表的维护由父表负责,`...
在Hibernate的映射文件(hbm.xml)中,我们可以使用`<array>`元素来配置数组映射。基本结构如下: ```xml ``` - `name`:指定Java对象中对应属性的名称。 - `type`:指定数组元素的类型,可以是基本类型,...
XML映射文件中包含了实体的属性、关联和其他元数据。 通过这些实例,开发者可以学习到如何在实际项目中应用Hibernate,理解其核心机制,并提高数据库操作的效率。熟悉这些映射方式对于开发复杂的Java应用至关重要,...
在对象关系映射(Object Relational Mapping,简称ORM)技术中,Hibernate作为Java领域内非常成熟且功能强大的框架之一,它允许开发者将Java类映射为数据库表,并管理Java应用中的对象关系持久化。其中,“关联映射...
在给定的文档中,我们看到一个例子,展示了如何在 Hibernate 中配置一个具有集合属性的实体类 `Person`,以及如何通过映射文件启用延迟加载。`Person` 类拥有一个 `Set<Address>` 类型的 `addresses` 属性,表示个人...
总之,Hibernate的多对多关联映射是解决复杂关系数据库设计的关键技术之一。通过合理的配置和使用,开发者可以轻松管理实体之间的多对多关系,提高开发效率。理解并熟练掌握这部分知识对于提升Java企业级应用开发...