Hibernate一对多,多对一,多对多,一对一关系汇总

开发 后端
向您介绍Hibernate中的一对多、多对一、一对一等重要关系,通过简单的代码示例展示各关系的具体配置。

Hibernate如果上手了,那么在Hibernate中的一对多,多对一,多对多,一对一这些关系,应该很快能理解.

下面就把这几种关系简单说一下.

本文中用到的三个实例化类分别为Customer(保存客户基本信息),CustomerDetails(保存客户详细信息),CustomerBack(中间表,保存两表之间的关联)
对应的表功能同上.说明中的主表指Customer,子表指CustomerDetails,中间表指CustomerBack

一对多

﹤set name="CustomerDetails" table="customer_details" 
inverse="false" cascade="all" sort="unsorted" ﹥ ﹤key column="cust_Id"/﹥
﹤one to many class="com.hibernate.otm.CustomerDetails"/﹥ ﹤/set﹥

这段代码是需要放在一对多中的主表配置中的

◆name:集合属性的名称(也可以理解为一对多中那个子属性名)

◆table(可选,默认为属性的名称):集合表的名称(可理解为一对多中子表的名称)

◆inverse(可选,默认为false):标记这个集合作为双向关联关系中的方向的一端

◆cascade(可选:默认为none):让操作级联到子实体

◆sort(可选):指定集合的排序顺序

其它如schema,lazy,order–by,where,outer–join,batch–size,access请参照有关书籍.

key 中的column=”cust_Id”,cust_Id并不是主表的字段,而是子表中保存主表的字段.
如主表主键为cust_Id,子表中为了保存主表的主键,也建一个cust_Id,key里的cust_Id就是指子表中的cust_Id.
one–to–many 中的class为一对多的子表实例类.

多对一

﹤many to one
    name="Customer"
    class="Customer"
    cascade="all"
    outer join="false"
    update="false"
    insert="false"
    column="cust_Id"
    not null="true"/﹥

多对一中,没有像一对多的,而是直接用了many–to–one.这段代码是需要放在多对一中的子表配置中的(即CustomerDetails的配置中)

◆outer–join:为外链接

◆update,insert:指定对应的字段是否在用于UPDATE和/或INSERT的SQL语句中包含.

◆column:关联的字段名.(多对主类对应的字段名)

◆not–null:是否为null.

多对多

﹤set name="CustomerBack" table="customer_back" cascade="all"﹥ ﹤key column="cust_Id"/﹥ ﹤many to many class="CustomerDetails" column="custD_id"/﹥ ﹤/set﹥

多对多的配置与一对多有点类似.这段代码放的位置也是与一对多的代码放的位置一样.
多对多关系中,多采用中间表来关联两个有多多关系的表的.如Customer与CustomerDetails存在多对多的关系,那么往往是用另外一个表如CustomerBack表来保存它们的关系的,也就是中间表.

◆name:属性的名称(可理解为中间表的名称)

◆table:表的名称(可理解为中间表的表名称)

◆key 里的cust_Id,是指中间表的cust_Id,为了保存Customer与CustomerDetails的关系,中间表中分别建了cust_Id(Customer的主键)与custD_Id(CustomerDetails的主键)

◆many–to–many中的Class是指多对多中的另一个实例化类,column是指CustomerDetails与中间表关联的字段名.这里是指中间表的

◆custD_Id,不能理解为CustomerDetails的主键.

一对一

﹤one to one name="CustomerDetails" class="CustomerDetails" cascade="all" /﹥
一对一的关系更简单.
在Customer表的配置中放上这段代码就行了.

◆name:属性名称

◆class:关联的实例化类名

 

【编辑推荐】

  1. 层层解析Hibernate中的事务的滥用
  2. 详解Hibernate的工作原理和体系结构
  3. 十五道关于Hibernate的面试题
  4. Hibernate、Spring和Struts工作原理及使用理由
  5. 关于Hibernate你必须知道的六个方面
责任编辑:佚名 来源: 新浪博客
相关推荐

2009-09-22 09:55:58

Hibernate实例

2010-04-15 09:09:02

Hibernate

2009-06-03 16:18:16

Hibernate关系代码实例

2009-06-03 16:27:27

Hibernate一对一关系

2009-07-21 17:31:39

iBATIS一对多映射

2023-06-12 08:09:01

FlaskSQLAlchemy

2022-02-18 11:05:25

Jpa配置Address

2012-03-21 11:43:41

JavaHibernate

2009-06-04 10:34:19

Hibernate一对一对多关系配置

2009-06-18 14:22:06

Hibernate多对Hibernate

2010-07-07 08:33:09

SQL Server学

2012-02-08 13:34:08

HibernateJava

2011-03-25 10:49:30

Join一对多

2009-06-24 15:51:47

Entity Bean一对多映射

2009-08-17 10:34:51

NHibernate一

2009-06-26 10:15:54

面试HR

2009-12-23 09:31:11

宽带路由上网故障

2009-09-23 10:37:50

Hibernate一对

2011-08-17 10:28:53

多对多查询SQL Server

2012-03-13 16:29:54

Between情侣移动应用
点赞
收藏

51CTO技术栈公众号