转自:http://www.cnblogs.com/tyler2000/archive/2011/01/20/1940354.html

1. Hibernate Annotation关系映射有下面几种类型:
1)一对一外键关联映射(单向)

2)一对一外键关联映射(双向)

3)一对一主键关联映射(不重要)在这不演示

在实际中很少用,使用注解@PrimaryKeyJoinColumn

意思是说,我的主键去参考另外一张表中的主键,作为我的主键,但是在我测试使用

注解一对一主键关联映射,在生成表的时候,数据库中并没有生成关联,使用XML

映射可以生成。Annotation注解一对一主键关联映,有些bug。不过没空去研究它。

因为在实际开发中一对一很少用。在实际开发中我机会没有用过,主键关联就更少了

4)多对一关联映射

5)一对多关联映射(单向)

6)一对多关联映射(双向)

7)多对多关联映射(单向)

8)多对多关联映射(双向)

2.介绍各种映射用法

1)一对一外键关联映射(单向)

@OneToOne(cascade=CascadeType.ALL)

@JoinColumn(name="userid",unique=true)

//一对一外键关联,使用@OneToOne,并设置了级联操作

//@JoinColum设置了外键的名称为userid(数据库字段名),如果不设置,则默认为另一类的属性名+ _id

//外键的值是唯一的(unique),不可重复,与另一类的主键一直

2)一对一外键关联映射(双向)

 Class1里与上面一样,  

Class2:

@OneToOne(mappedBy="class2",cascade=CascadeType.ALL)

//一对一双向关联关系,使用@OneToOne

//注意:需要加上mappedBy="class2",如果不加上的话,

//Class2也会生成一个外键(class1_id)

//mappedby="class2"需要指向与他关联对象的一个属性

//说明双向关联关系中,有且仅有一端是作为主体(owner)端存在的

//主体端负责维护联接列

//对于不需要维护这种关系的从表则通过mappedBy属性进行声明

//mappedBy的值指向主体的关联属性

//规律:只有是双向关联关系,都加上mappedby

//cascade=CascadeType.ALL级联

4)多对一关联映射

在多的一端配置:

@ManyToOne(targetEntity=Organization.class)

@JoinColumn(name="orgid")

//多对一注解@ManyToOne

//targetEntity指定了关联对象

//@JoinColumn(name="orgid")指定生产的外键的字段名,默认是org_id

5)一对多关联映射(单向)

@OneToMany

@JoinColumn(name="orgid")

/**

* 一对多注解@OneToMany(单向)

* 如果只写@OneToMany的话,hibernate会建一张中间表来

* 维护他们之间的关系,

* 加上@JoinColumn(name="orgid"),则不会建中间表,他会在

* 多的一端加上外键orgid,来维护他们之间的关系

*/

6)一对多关联映射(双向)

一端:

@OneToMany(mappedBy="org")

@JoinColumn(name="orgid")

/**

* 一对多双向,在一的一端中设置mappedBy

* 说明多的一端为主导

* 如果指定了外键字段名称,则多的一端也需要指定相同的字段名称

*/

多端:

@ManyToOne

@JoinColumn(name="orgid")

/**

* 一对多双向

* 需要指定外键与一的一端给的外键名称一致,@JoinColumn(name="orgid")

* 也可以不指定,如果在多的一端不指定,则一的一端也不能指定

* 否则为生成两个外键

*/

7)多对多关联映射(单向)

@ManyToMany

/**

* 多对多映射:注解@ManyToMany(单向)

* 默认情况下,hibernate会自动的创建一张中间表,

* 来维护多对多关系

* 默认中间表的名称 :user_role中间表,字段的名称user_id role_id

* 如果想更换表名和字段名称,注解如下:

*/

@JoinTable(name="t_u_r",

")},

")}

)

8)多对多关联映射(双向)  User端

@ManyToMany

/**

* 多对多映射:注解@ManyToMany(单向)

* 默认情况下,hibernate会自动的创建一张中间表,

* 来维护多对多关系

* 默认中间表的名称 :user_role中间表,字段的名称user_id role_id

* 如果想更换表名和字段名称,注解如下:

*/

@JoinTable(name="t_u_r",

")},

")}

)

/**

* @JoinTable(name="t_u_r",

* 指定中间表的表名

* ")},

* 指定当前对象的外键

* ")}

* 指定关联对象的外键

*/

Role端

@ManyToMany(mappedBy="role")

/**

* 多对多,双向关联映射

*

Hibernate -- 注解(Annotation)关系映射的更多相关文章

  1. hibernate的对象/关系映射结果为空,exists查不到值的问题-20190823

    1: hibernate的对象/关系映射 情景:在使用@onetotone/@manytonone时关联结果为空 原因:在使用这个注解的时候,默认的时crossjoin(交叉连接),在进行查询时以及排 ...

  2. Hibernate多对多关系映射(建表)

    下边讲述Hibernate多对多关系映射. 多对多关系的表的结构为: 两个实体表,还包含一个关系表,关系表为复合主键,如果要使用Hibernate多对多关系映射,则关系表必须只包含两个字段,如果生成了 ...

  3. 菜鸟学习Hibernate——多对多关系映射

    Hibernate中的关系映射,最常见的关系映射之一就是多对多关系映射例如用户与角色的关系,一个用户对应多个角色,一个角色对应多个用户.如图: Hibernate中如何来映射这两个的关系呢? 下面就为 ...

  4. 菜鸟学习Hibernate——一对多关系映射

    Hibernate中的关系映射,最常见的关系映射之一就是一对多关系映射例如学生与班级的关系,一个班级对应多个学生.如图: Hibernate中如何来映射这两个的关系呢? 下面就为大家讲解一下: 1.创 ...

  5. Hibernate之实体关系映射

    延迟加载与即时加载 例如Person类和Email类是一对多关系,如果设为即时加载,当加载Person时,会自动加载Email,如果设置为延迟加载,当第一次调用person.getEmails()时才 ...

  6. Hibernate:对象关系映射(一对一,一对多,多对一,多对多)

    如需转载,请说明出处:http://www.cnblogs.com/gudu1/p/6895610.html Hibernate通过关系映射来表示数据库中表与表之间的关系,关系映射可以通过两种方式:配 ...

  7. Hibernate学习之关系映射(转)

    一.一对多 "一对多"是最普遍的映射关系,简单来讲就如消费者与订单的关系.一对多:从消费者角的度来说一个消费者可以有多个订单,即为一对多.多对一:从订单的角度来说多个订单可以对应一 ...

  8. Hibernate 中对象关系映射(ObjectRelationMapping)

    1.什么是对象关系映射? 解析:对象-关系映射(Object Relational Mapping,简称ORM,对象关系映射)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说, ...

  9. Hibernate多对多关系映射

    两张表的多对多关系,在数据库中通常是通过第三张中间表来实现的,第三张中间表放的是两张表各自的主键值,通过主键与主键的对应来体现表直接的关系.比如在权限系统中,一个用户可以拥有多种权限,而一种权限也可以 ...

  10. Hibernate框架学习之注解配置关系映射

         上篇文章我们通过注解对映射了单个实体类,但是具体项目中往往实体类之间又是相互关联的,本篇文章就是从实体类之间存在的不同关联角度,具体学习下如何映射他们之间的关联,主要涉及内容如下: 单向的一 ...

随机推荐

  1. Hadoop最基本的wordcount(统计词频)

    package com.uniclick.dapa.dstest; import java.io.IOException; import java.net.URI; import org.apache ...

  2. Android无法更新sdk的解决办法

    修改 windows/system32/drivers/etc/hosts 文件 添加 203.208.46.146 dl.google.com203.208.46.146 dl-ssl.google ...

  3. Qt 学习之路:输入元素

    前面的章节中,我们看到了作为输入元素的MouseArea,用于接收鼠标的输入.下面,我们再来介绍关于键盘输入的两个元素:TextInput和TextEdit. TextInput是单行的文本输入框,支 ...

  4. Java SE 6 新特性: HTTP 增强--转

    概述 Java 语言从诞生的那天起,就非常注重网络编程方面的应用.随着互联网应用的飞速发展,Java 的基础类库也不断地对网络相关的 API 进行加强和扩展.在 Java SE 6 当中,围绕着 HT ...

  5. JS的事件监听机制

    很久以前有个叫Netscape的姑娘,她制订了Javascript的一套事件驱动机制(即事件捕获) 后来又有一个叫“IE”的小子,这孩子比较傲气,他认为“凭什么我要依照你的规则走”,于是他又创造了一套 ...

  6. 零基础学习云计算及大数据DBA集群架构师【Linux系统环境及权限管理12.21-12.25】

    从这周开始Linux的学习,老师是一位女老师,这到给了更多的信心,老师讲得很快,如果说只谈记命令的话是不多,但是要真正去理解,其实内容还是挺多的,我都是以老师讲的内容为主线,然后自己再看鸟哥的书做加深 ...

  7. javascript中,你真的会用console吗?

    使用console进行性能测试和计算代码运行时间 对于前端开发人员,在开发过程中经常需要监控某些表达式或变量的值,如果使用用debugger会显得过于笨重,最常用的方法是会将值输出到控制台上方便调试. ...

  8. anjularjs slider控件替代方案

    做项目需要一个slider控件,找了很久没有找到合适的指令集,无意间看到可以直接用range替代,不过样式有点丑. <label> <input type="range&q ...

  9. IOS开发网络篇之──ASIHTTPRequest详解

    目录 目录 发起一个同步请求 创建一个异步请求 队列请求 请求队列上下文 ASINetworkQueues, 它的delegate提供更为丰富的功能 取消异步请求 安全的内存回收建议 向服务器端上传数 ...

  10. 【转】 iOS开发UI篇—UIScrollView控件实现图片轮播

    原文:http://www.cnblogs.com/wendingding/p/3763527.html iOS开发UI篇—UIScrollView控件实现图片轮播 一.实现效果 实现图片的自动轮播 ...