hibernate对象关系
来源:互联网 发布:什么是淘宝实体店 编辑:程序博客网 时间:2024/06/10 17:28
hibernate学习第二天总结
昨天我们学到了处理单个对象的hibernateAPI,已经配置mapping,今天我们来学习,对象和对象之间有关系的,hibernate是怎么处理的
对象和对象之间的关系有关联关系,关联关系又分为一对一的关联,一对多的关联,多对多的关联
一对一的关系有 共享主键见表方式 唯一外键见表方式
共享主键建表方式 即一张表的主键,做了主键又做了外键
下面我做了一个列子,一个是类是人,一个类是护照
一个人对应一本护照
<?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" >
//hibernate的DTD
<hibernate-mapping package="day2">//为了在类前面少写类名,所以可以再hibernate-mapping可以加上packae属性
<class name="Person" table="t_person">//person这个类对应数据库里面的t_person
<id name="id" column="t_id" type="java.lang.Integer">//t_person的主键生成器是自增长
<generator class="increment"></generator>
</id>
<property name="name" type="java.lang.String" column="t_name"/>
<property name="age" type="java.lang.Integer" column="t_age"/>
<property name="birthday" type="java.util.Date" column="t_birthday"/>
<one-to-one name="passport" class="Passport" cascade="all"></one-to-one>
//Person类里面有一个Passport类的关联属性,名字叫做passport,根据传递性持久化,要保存person对象的时候,同时要保存
passport对象,所以关联属性passport里面的 passport对象存放到 Passport类所对应的表里面 ,即是t_passport表
对于 one-to-one标签默认的外键是 t_passport的主键,级联为all,意思就是当t_person表添加删除修改,查询的时候都带上
t_passport的内容
</class>
<class name="Passport" table="t_passport">//Passport类对应数据库里面的t_passport数据表
<id name="id" column="t_id" type="java.lang.Integer">//t_passport表的主键生成器
<generator class="foreign">//这个主键生成器,我理解为是外键
<param name="property">person</param>
//这个外键来自哪里呢,来自一个属性,属性的名字是自己的关联属性person所对应的那个对象的主键
</generator>
</id>
<property name="serial" type="java.lang.String" column="t_serial"/>
<property name="expire" type="java.lang.Integer" column="t_expire"/>
<one-to-one name="person" class="Person" cascade="all" constrained="true"></one-to-one>
//在passport类里面有一个person关联属性,根据传递性可持久化,在查询passport所对应的表的时候要把person对象所对应的表
也要查询出来,所以保存这个person对象 到Person类所对应的表里面,级联为all,外键为t_person的主键 constrained="true"
意思是申明这t_passport是子表
</class>
</hibernate-mapping>
下面是唯一外键,我也举个列子
举得列子是每个公司都有相应的地址
<?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" >
<hibernate-mapping package="day2">
<class name="Company" table="t_company">
<id name="id" column="t_id" type="java.lang.Integer">
<generator class="increment">
</generator>
</id>
<property name="name" type="java.lang.String" column="t_name"/>
<property name="openDate" type="java.util.Date" column="t_open_date"/>
<one-to-one name="a" class="Address" property-ref="c" cascade="save-update"></one-to-one>
//Company类里面有一个关系属性名字叫a类型是Address,当保存更新查询的时候,这个关系属性,就会去参考Address的c属性
因为现在不是去参考另一张表的主键了,而去参考另一张表的 私自的字段,在t_address表里面有一个c_id列,
比如举个列子当查询的时候,查询条件是查询公司id为1 的地址,那么因为有onetoone标签,所以他有一个引用,这个应用的名字叫做a,引用的类型是Address,当读到property-ref="c" 这句话的时候他就去读取Address类里面的c属性,又因为c属性是个company对象的引用,这个company对象里面有主键id的信息,所以在t_address表里面有用,根据这个主键信息,把相关 的记录查出来,查出来又是一个Address对象,所以信息是这么查出来的
</class>
<class name="Address" table="t_address">
<id name="id" column="t_id" type="java.lang.Integer">
<generator class="increment">
</generator>
</id>
<property name="city" column="t_city" type="java.lang.String"/>
<property name="street" column="t_street" type="java.lang.String"/>
<property name="zipCode" column="t_zip_code" type="java.lang.String"/
<many-to-one unique="true" name="c" class="Company" column="c_id" cascade="save-update" ></many-to-one>
// 这边为什么用many to one 标签呢,因为这个一对一的关系,这个字表有一个列是外键列,外键列,本来是可以重复的,这么就是
一个公司可以有多个地址。所以在原意上就是用many to one 不过我们可以加上unique属性等于true,就可以保证这个外键列是不重负的,这个关系属性名字叫做c,对应的表示Company所对应的表,在数据库里面所对应的字段是c_id,这个就是在数据库中的这个外键列的名字,级联样式为,保存和更新,
</class>
</hibernate-mapping>
下面是一个一对多的样例
举得例子就是一个部门下游多个员工
这是一个单向关系,就是部门能找到员工,而员工不能找到部门
<?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" >
<hibernate-mapping package="day2">
<class name="Dept" table="t_dept">
<id name="id" column="t_id" type="java.lang.Integer">
<generator class="increment">//主键的增长模式是自己在原有的基础上增加1
</generator>
</id>
<property name="dname" column="t_dname" type="java.lang.String"></property>//普通属性
<property name="dno" column="t_dno" type="java.lang.String"></property>
<set name="employees" cascade="save-update">
<key column="d_id"/>
<one-to-many class="Employee"/>
</set>
//因为在Dept类里面有一个set的Emplyee对象的集合,用来表示一个部门有多个员工,name=employees意思是这个属性的名字叫
employees,级联为保存,修改,查询,column=d_id意思是对应Employee类所对应的表的d_id外键
</class>
<class name="Employee" table="t_employee">
<id name="id" column="t_id" type="java.lang.Integer">
<generator class="increment">
</generator>
</id>
<property name="name" column="t_name" type="java.lang.String"></property>
<property name="email" column="t_email" type="java.lang.String"></property>
<property name="birthday" column="t_birthday" type="java.util.Date"></property>
<property name="salary" column="t_salary" type="java.lang.Double"></property>
</class>
</hibernate-mapping>
- Hibernate的对象关系
- hibernate对象的关系
- hibernate 对象 - 关系映射
- Hibernate的对象关系
- hibernate对象关系
- hibernate对象关系2
- hibernate对象关系映射
- hibernate对象关系映射
- Hibernate对象-关系映射
- hibernate对象关系映射
- Hibernate对象关系映射
- Hibernate一对一关系操作对象
- Hibernate ORM 对象-关系 映射
- 对象/关系映射—Hibernate
- Hibernate ORM 对象-关系 映射
- Hibernate ORM 对象-关系 映射
- hibernate对象关系映射配置
- Hibernate -- 对象关系映射基础
- dfsdf
- 普洱茶保健功效[降脂、减肥、降压、抗动脉硬化 防癌、抗癌 养胃、护胃 消炎、杀菌、治痢]
- JAVA中的Arrays类
- Android Animation
- Windows的第一个程序
- hibernate对象关系
- android开发案例之使用JSON数据向服务器提交和获取服务器传递的Json数据
- C++ 子类不能重载父类函数 解决方法
- 各种cache技术基本特性
- git使用总结
- 黑场信号
- C++万年历
- LCD中文字模编译前自动提取的方法
- 关于启联新平台专栏