Hibernate 中 一对多、多对一、 关联关系的 配置
来源:互联网 发布:js new一个对象 编辑:程序博客网 时间:2024/05/19 13:55
多对一:(街道→区县)
- * TBLJd.java 类*
public class TblJd implements java.io.Serializable { // Fields private Integer jdid; private TblQx tblQx; private String jd; private Set tblFwxxes = new HashSet(); ...... }
- TblJd.hbm.xml:
<class name="com.qbz.entity.TblJd" table="TBL_JD" schema="dbo" catalog="zf"> <id name="jdid" type="java.lang.Integer"> <column name="jdid" /> <generator class="native" /> </id> <many-to-one name="tblQx" class="com.qbz.entity.TblQx" fetch="select" lazy="false" cascade="all"> <column name="qxid" not-null="true" /> </many-to-one> <property name="jd" type="java.lang.String"> <column name="jd" length="50" /> </property> </class>
- < many-to-one >元素建立了 tblQx 属性和 TBL_JD 表的的外键 qxid 的映射关系,其包括以下属性:
- name : 设定待映射的持久化类的属性名,此处为 TblJd 类的 tblQx 属性。
- column:设定和持久化类的属性对应的外键,此处为TBL_JD表的外键 qxid。
- class:设定持久化类的属性类型,此处设定 tblQx 类型为 com.qbz.entity.TblQx。
一对多:(街道→房屋信息)
- TblJd.hbm.xml:
<class name="com.qbz.entity.TblJd" table="TBL_JD" schema="dbo" catalog="zf"> <id name="jdid" type="java.lang.Integer"> <column name="jdid" /> <generator class="native" /> </id> <many-to-one name="tblQx" class="com.qbz.entity.TblQx" fetch="select" lazy="false" cascade="all"> <column name="qxid" not-null="true" /> </many-to-one> <property name="jd" type="java.lang.String"> <column name="jd" length="50" /> </property> <set name="tblFwxxes" inverse="true" lazy="false"> <key> <column name="jdid" /> </key> <one-to-many class="com.qbz.entity.TblFwxx" /> </class>
- < set >元素建立了tblFwxxes 属性在数据库中的映射关系。
- set : 表明 TblJd 类的 tblFwxxes 属性为 java.util.set 集合类型。
- key : 表明 TBL_FWXX 表通过外键 jdid 参照 TBL_JD表。
- one-to-many : 表明 tblFwxxes 集合中存放的是一组 TblFwxx 对象。
- 其中:
- inverse: 表示关系的维护由谁来执行。true 表示不由自己执行,而有对应的另外一方执行。false 则相反,表示由自己维护关系。
- inverse 属性在< one-to-many >中,如果由one来维护,那么性能会非常低。因为,many 方的每一次操作,one方都要维护一次双方的关系。
- cascade : 表示是否进行级联操作。all表示所有的操作都进行级联。
多对多:(学生→老师)
- Student.java 类
public class Student implements java.io.Serializable { // Fields private Integer id; private String name; private Set teachers = new HashSet(0); ....... }
- Teacher.java 类
public class Teacher implements java.io.Serializable { // Fields private Integer id; private String name; private Set students = new HashSet(0); ....... }
- Student.hbm.xml:
<hibernate-mapping> <class name="com.qbz.entity.Student" table="student" schema="dbo" catalog="guanxiyingshe"> <id name="id" type="java.lang.Integer"> <column name="id" /> <generator class="native" /> </id> <property name="name" type="java.lang.String"> <column name="name" length="50" /> </property> <set name="teachers" inverse="true" table="teacher_student" schema="dbo" catalog="guanxiyingshe"> <key> <column name="student_id" not-null="true" /> </key> <many-to-many entity-name="com.qbz.entity.Teacher"> <column name="teacher_id" not-null="true" /> </many-to-many> </set> </class></hibernate-mapping>
对于双向多对多关系,必须把其中一端的属性的inverse 属性配置为true,关联的两端都可以使用< set >元素。
在数据库设计时,需要设计一个中间表 teacher_student ,通过中间表描述学生表和老师表的多对多关系。
其映射文件配置方式与一对多很类似,也需要一个 class 属性来设置关联的属性的类型,column 属性用来设定哪个字段去做外键关联,最后,根据业务需要,将某一方的inverse 属性设置为false。
1、这里比一对多关联多一个 table 属性,table 指向数据库建立的关联的那张表。
2、Key 中的 column : 关联表中和 student 表发生关系的字段。
3、Many-to-many 中的 column 指的是关联表中与 class (com.qbz.entity.Teacher) 关联的字段。
1 0
- Hibernate 中 一对多、多对一、 关联关系的 配置
- Hibernate一对多、多对一关联关系的使用
- Hibernate关联关系配置-----基于连接表的双向一对多/多对一映射配置
- Hibernate关联关系配置(一对多、一对一、多对一和多对多)
- Hibernate关联关系映射 一对一 一对多 多对一
- hibernate关联关系中的一对多以及多对一
- Hibernate关联关系映射(一对多/多对一)
- 【Hibernate】--关联关系映射:一对多和多对一
- hibernate关联关系配置(一对一,一对多,多对多)
- Hibernate关联关系配置(一对一,一对多,多对多)
- Hibernate中一对多、多对一关系的映射
- Hibernate关联关系映射-----双向一对多/多对一映射配置
- Hibernate关联关系映射-----双向一对多/多对一映射配置
- hibernate映射关系 一对多、多对一单向关联 一对多双向关联
- Hibernate关于一对多 多对一 多对多关联关系的设置
- hibernate 自身表关联的多对一,一对多关系的实现
- hibernate一对多关联关系配置经验
- 《Hibernate学习笔记九》:多对一和一对多的关联关系
- win32编成入门-位图
- DNS主从复制及区域传送
- 会计转行SAP FICO实施顾问,百万年薪等你来挑战!
- 管理 Outlook 2003 中的脱机通讯簿
- hdoj 1379 DNA Sorting 【结构体应用】
- Hibernate 中 一对多、多对一、 关联关系的 配置
- 查看策略应用结果
- 暑期集训搜索专题(一)
- HDU 1869--六度分离 【任意点最短路】
- webkit 与 webcore
- zoj2104
- PAT (Basic Level) Practise (中文)1039. 到底买不买(20) C语言
- PCB参数计算神器-Saturn PCB Design Toolkit下载及安装指南
- Leetcode 14 Longest Common Prefix