首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hibernate各种投射的小结

2012-08-31 
Hibernate各种映射的小结Hibernate各种映射的小结个人定义:1.many方:持有foreign key 字段的一方2.单向:关

Hibernate各种映射的小结

Hibernate各种映射的小结

个人定义:

1.many方:持有foreign key 字段的一方

2.单向:关联双方在Object表现形式时,持有另一方的情况,一般Many方持有另一方的对象

? ?双向:关联双方相互持有对方对象

3.many-to-one: 对应于数据库表格中的foreign key

一、一对一外键映射

1.数据库中表的情况

一个表的外键关联另一个表的主键

2.映射表中的配置

单向:

Many方持有的对象配置many-to-one,设定unique="true"

如?

?

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!--     Mapping file autogenerated by MyEclipse Persistence Tools--><hibernate-mapping>    <class name="com.linys.model.Husband" table="husband">        <id name="id" type="java.lang.Integer">            <column name="id" />            <generator />        </id>                <property name="name" type="java.lang.String">            <column name="name" length="50" not-null="true" />        </property>        <!-- 关联信息 -->        <!--         name: 该Object类(Husband)关联的对象属性         class:关联的对象的类        unique:值为true时表一对一外键关联        column:在关联表中关联字段         -->        <many-to-one name="wife" unique="true">            <column name="wifeid" />        </many-to-one>    </class></hibernate-mapping>
?

?

双向:

1)Many方持有的对象配置同单向

2)为One方持有的对象配置one-to-one,指定cascade=true,inverse=true

如?

?

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!--     Mapping file autogenerated by MyEclipse Persistence Tools--><hibernate-mapping>    <class name="com.linys.model.Wife" table="wife">        <id name="id" type="java.lang.Integer">            <column name="id" />            <generator />        </id>        <property name="name" type="java.lang.String">            <column name="name" length="50" not-null="true" />        </property>        <!-- 关联信息 -->                <!--         name: 在Wife中关联的对象名        class: 关联的对象类        property-ref :在关联的对象类中该类的关联属性名        cascade:设置是否级联         -->        <one-to-one name="husband"          property-ref="wife" cascade="all" inverse="true"/>    </class></hibernate-mapping>
?

?

3.对象存储的操作

同时存储两个对象时,顺序不一样,插入语句不一样,但多不会报错

存一个对象时,如果是单向时,如果存many方会出错,因为many方有外键,如果是one方,不会出错,但只会存one对象;如果是双向时,如果存many方会出错,因为many方有外键,如果是one方,不会出错,会存储双方,因为one方是cascade方,主控方

?

二、一对一主键映射

1.数据库中表的情况

一个表的主键依赖与另一个表的主键生成,即一个表的主键又是外键关联到另一个表的主键

2.映射表中的配置

单向:

Many方1)配置id:生成器generator为foreign,并指定Object类的关联属性

2)配置one-to-one 配置关联属性,必须加constrained为true

如:

?

 <id name="id" type="java.lang.Integer" column="id">        <!-- 基于主键关联时,主键生成策略是foreign,表明根据关联类生成主键 -->            <generator constrained="true"/>
?

双向:

1)Many方同单向

?

2)为One方持有的对象配置one-to-one,指定cascade

<one-to-one name="wife" property-ref="husband" cascade="all"/>

3.对象存储的操作

同时存储两个对象时,顺序不一样,插入语句不一样,但多不会报错

存一个对象时,如果是单向时,如果存many方会插入双方,因为many方有外键,需先插入one方获得主键后才能插入,如果是one方,不会出错,但只会存one对象;如果是双向时,如果存many方或one方,都不会出错,会存储双方,因为one方是cascade方,是主控方

?

?

三、多对一和一对多,以及二者一起用时构成双向

1.数据库中表的情况

一张表的外键关联另一张表的主键

2.Object类中的差别

多对一,many方持有one方的对象

一对多,one方持有many方的Set对象集合

3.映射表中的配置

多对一:

Many方1)配置many-to-one 配置关联属性

如:

<many-to-one name="group" not-null="true" />        </many-to-one>

?一对多:

?

1)为One方持有的对象配置?

?

<!-- set 指定Object类中的属性 -->        <set name="users" >          <!-- 指定在关联表中的外键字段 -->          <key column="groupId" />          <!--set中包含的对象 -->         <one-to-many name="code"><?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.linys.model.Teacher"><id name="id"><generator table="t_s">    <!-- 该类在关联表中的信息 -->    <!-- 关联表中的字段 --><key column="teacher_id"/><!-- 与该类关联的类的信息 --><!-- 类名,以及在关联表中的关联字段 --><many-to-many column="student_id"/></set>    </class></hibernate-mapping>
?

?

双向:

1)many双方配置同单向

?

热点排行