Hibernate持久化类属性映射

Hibernate充当应用程序和数据库之间的中间件,实现二者之间的交互操作,他对JDBC进行了封装,以完全面向对象的方式来操作数据。

适用于有多个数据源的情况下,不必去考虑不同数据源的操作差异。

Hibernate将类型对象与数据库表建立映射关系,把类的属性映射称为数据库表的字段,Hibernate属性映射可分为简单属性映射、集合属性

映射、复合属性映射及派生属性映射。下面分别以实例介绍这几个映射及其对应的映射文件表示方式。

1、简单属性

假设有个User类,对应数据库中的User表

User类中的属性包括:                   <--------------->        user_info表中对应字段:

id: int                                                                    id: primary key

name: String                                                          name

age:  int                                                                 age

birthday: Date                                                         birthday

salary:  float                                                            salary

则可在*.hbm.xml中配置类对象到数据库表的映射关系如下(User.hbm.xml):

 1 <hibernate-mapping package="com.pattywgm.a_simple_test">
 2     <!--对象到表的映射 -->
 3     <class name="User" table="user_info">
 4         <!--
 5            id元素: 表示对象标识符OID即数据库表的主键
 6                          属性:type 元素类型
 7                column 数据库表中对应的列名
 8         -->
 9         <id name="id" type="int" column="id">
10             <!--
11                generator元素表示主键生成策略
12                native:根据底层数据库自动选择主键生成方式,identity,sequence,hilo
13              -->
14             <generator class="native"/>
15         </id>
16         <!--属性到列的映射 -->
17         <property name="age" type="int" column="age"></property>
18         <property name="name" type="string" column="name"/>
19         <property name="birthday" type="date" column="birthday"/>
20         <property name="salary" type="float" column="salary"/>
21     </class>
22
23 </hibernate-mapping>

2、Set集合

有时候一个类对象可能存在某个属性对应多个值,这种情况下若希望每个值都是不重复的就得选用Set集合,如User用户可能对应多个地址(土豪、房多),这时候

从面向对象的角度将就是用一个Set来存放用户的地址信息而保证不重复,从数据库的角度将,我们可以建立一个关联的表address,表外键为user_id对应user_info表的

主键id。

 1 <!-- set集合的映射
 2             table属性:集合表的名称
 3             key子元素:集合外键的列名
 4             element子元素:存放集合元素的列的信息
 5             sort属性:"unsorted|natural|comparatorClass"
 6                 默认为:unsorted
 7             order-by属性:写的是order by 子句,是SQL语句,是操作的集合表。
 8                 这是在查询数据时指定orderby子句。
 9         -->
10         <set name="address" table="address" sort="natural">
11            <key column="user_id" not-null="true"></key>
12            <element column="address" type="string" length="50"></element>
13         </set>

Set集合映射

3、List、Bag、Array映射

很多时候,可能对于某样东西我们不仅有很多个,发烧级的还会同样的东西买多个,这个时候可以使用List来保存,同时干净整洁的达人们一般都会尽然有序的排放

整齐自己的东西啦,要是阁下豁出去了,承认自个儿就这么随意,尽情打包到Bag中吧。现在假设User的不少用户都是运动鞋发烧友了哈,这样建立一个与每个user相

关的爱鞋维护,放在user_shoesList表中,在User.hbm.xml映射文件中的配置如下:

 1 <!-- List集合
 2         key:外键列
 3     list-index:用于存放索引的列(有序),这样数据库表中就不会有重复项了
 4     key + list-index ==> primary key
 5         -->
 6 <list name="shoes" table="user_shoesList">
 7     <key column="user_id" not-null="true"></key>
 8     <list-index column="shoe_idx"></list-index>
 9     <element column="shoe" type="string"></element>
10 </list>

List映射

Bag的映射类似于List,另外Array的映射也基本同于List,这里做几点说明:

1)Set集合中的元素不重复且无序的,映射 Set 集合属性时, 如果 element 元素包括 not-null = “true” 属性,
         则集合属性表以关联持久化类的外键和元素列作为联合主键,否则该表没有主键。

2)List中的元素是可重复但有序的,List 集合属性总是以外键列key和元素索引序列list-index作为联合主键

3 )Bag中的元素可重复且无序,bag 元素既可以为 List 集合属性映射,也可以为 Collection 集合属性映射。
          不管是哪种集合属性,使用 bag 元素都将被映射成无序集合,而集合属性对应的表没有主键
          Bag 元素只需要 key 元素来映射外键列,使用 element 元素来映射集合属性的每个元素。

4、Map映射

在需要key-value对的场合,就需要用到map了,这时候不仅要映射map属性,还要表达他的key-value映射。假设为User表的每个用户添加家庭成员关系。

 1 <!--
 2            map映射
 3             key元素:指示外键列
 4             map-key元素: 指示集合的key值,必须有type属性
 5             element元素: 指示集合的value值,必须有type属性
 6 -->
 7 <map name="family" table="user_family">
 8        <key column="user_id"></key>
 9        <map-key column="appellation" type="string"></map-key>
10        <element column="name" type="string"></element>
11 </map>

Map映射

时间: 2024-10-11 04:10:47

Hibernate持久化类属性映射的相关文章

使用MyEclipse反向工程快速创建持久化类、映射文件和Hibernate组件

在MyEclipse中创建连接模板 一.选中此项 二.右键新建一个连接模板 三.进入此页面依次选择数据库.Driver name 为这个连接模板的名字.点击Add JARs选择驱动类(在oracle下的安装目录下的ojdbc6.jar).在Save password可选 (是否保存密码)然后点Next 四.选择数据库模式,点Add,选择SCOTT模式,Finsh. 创建Hibernate配置文件一.选择项目 二.如果没有对应的版本.去掉所有的√,点Next 三.如果存在xml文件选择Existi

hibernate由表生成持久化类和映射文件

Eclipse 由表生成持久化类和映射文件

笔记:Hibernate 持久化类标注说明

持久化类标注 标注 @Entity:注解声明该类是一个Hibernate的持久化类 标注 @Table:指定该类映射的表 参数 name:指定映射数据库表的名称 参数 uniqueConstraints:为持久化类所映射的表设置唯一约束,该属性的值是 @UniqueConstraint 标注数组 参数 indexes:为持久化类说映射的表设置索引,该属性的值是 @Index 标注数组 参数 catalog:设置持久化类说映射的表放入指定的 catalog 中,没有指定则放入默认 catalog

(转) Hibernate持久化类与主键生成策略

http://blog.csdn.net/yerenyuan_pku/article/details/65462930 Hibernate持久化类 什么是持久化类呢?在Hibernate中持久化类的英文名称是Persistent Object(简称PO),PO=POJO+hbm映射配置文件. 对于Hibernate中的PO,有如下编写规则: 必须提供一个无参数的public构造方法. 所有属性要用private修饰,对外提供public的get/set方法. 在PO类必须提供一个标识属性,让它与

myeclipse自动生成可持久化类的映射文件的方法

首先在透视图中选择DB Browser视图: . 然后按照下面的截图一步一步做就可以了. 在偏好设置中选择MyEclipse--Database Explorer--Drivers,配置数据库驱动: . 新建数据库驱动,选择Oracle Thin Driver模板,并且在Driver Jars中选择恰当的JDBC包: . 这样数据库驱动就配置好了,下面是使用配置好的驱动连接数据库,首先新建连接: . 新建连接配置文件: . 选择刚才的驱动配置文件,并且给连接配置文件取名,按照格式填入数据库连接U

笔记:Hibernate 持久化类标注示例-双向1-N关系映射

1-N关系的1端持久化类 package org.drsoft.hibernate.model.oneToMany; ? ? import java.util.Date; import java.util.Set; ? ? import javax.persistence.*; ? ? @Entity @Table(name = "OneToMany_One") public class OneToManyForOneModel { @Id @Column(name = "R

3.1 hibernate持久化类及一级缓存

1.持久化类编写规则 Hibernate是持久化层的ORM映射框架,专注于数据的持久化工作. 持久化:所谓的持久化就是讲内存中的数据永久保存到关系型数据库中. 持久化类:其实所谓的持久化类指的是一个Java类与数据库表建立了映射关系,那么这个类称为是持久化类.其实,你可以简单的理解为就是一个Java类,该类通过一个映射文件与数据库的表建立了关系.持久化类的编写规则如下: 1.持久化类提供无参数构造:因为在hibernate的底层需要使用反射生成类的实例: 2.成员变量私有,提供共有get/set

Hibernate持久化类规则

注意事项: 提供无参的构造方法,因为在hibernate需要使用反射生成类的实例 提供私有属性,并对这些属性提供公共的setting和getting方法,因为在hibernate底层会将查询到的数据进行封装 尽量使用封装类,因为包装类和基本数据类型的默认值不一样,包装类的类型语义更加清晰,而基本数据类型不容易描述 提供唯一一个oid,与数据库表的主键对应:因为hibernate需要使用oid来判断在内存中是否存在同一个持久化类,而在Java中是通过地址来区分的是否是同一条记录 不要用final修

hibernate access访问持久化类属性的策略

<property>元素的access属性用法: access有两个可选的值: 1,property:这是默认值,表明hibernate通过set和get方法来访问类的属性.这是优先的推荐方式.你必须为这个属性设置get和set方法,hibernate才能访问到.否则会报错的. 2,field:表明hibernate通过java的反射机制直接访问类的属性.你可以不给这个属性设置get和set属性. 这个属性在我们拼凑用户名的时候很有效.如下示例: Java代码   public class C