内容简介:Hibernate 关系映射整理
一、概念:
关系:名词,事物之间相互作用、相互联系的状态。
关联:名词:表示对象(数据库表)之间的关系;动词:将对象(数据库表)之间通过某种方式联系起来。
映射:将一种形式转化为另一种形式,包括关系。
级联:动词,有关系的双方中操作一方,另一方也将采取一些动作。
值类型:对象不具备数据库同一性,属于一个实体实例其持久化状态被嵌入到所拥有的实体的表行中,没有标识符。
实体类型:具有数据库标识符。
二、数据库:
1、关系
2.1.1、一对一、一对多、多对多
2.1.2、如何表示? 外键+索引
2、级联:
2.2.1、 级联 增加
2.2.2、 级联删除
2.2.3、级联 修改
2.2.4、级联查询
三、面向对象语言中(Java中):
1、关系
3.1.1、一对一、一对多、多对多
3.1.2、如何表示? 实例变量(对象+集合)
2、级联:
3.2.1、级联删除
3.2.2、级联更新
3.2.3、级联保存
四、如何把数据库关系表示为面向对象中的关系:
1、关联:将数据库表之间的关系转化为对象之间的关系;在Hibernate中总指实体之间的关系。
2、映射:完成 java 对象到数据库表的双向转换。
3、级联(可选):将数据库中的级联转化为对象中的级联(两者(对象和数据库表)没关系)。
4、Hibernate的表和对象的映射:
1)、实体类型映射:
4.1.1、主键之间的映射
4.1.2、类属性与表字段的映射(基本映射)
4.1.3、组件映射
4.1.4、集合映射
4.1.5、继承映射
2)、实体关联关系映射:
1、单向一对一关联映射(one-to-one)
2、单向多对一关联映射(many-to-one)
3、单向一对多关联映射(one-to-many)
4、单向多对多映射(many-to-many)
5、双向一对一关联映射
6、双向一对多关联映射
7、双向多对多关联映射
4)、单向与多向
双向单向是面向对象的说法 意思就是你更新一个表另外一个表里面关联的数据跟着改变。
(1)、双向就是这两个表无论哪一个更新另外一个表都更新 。
(2)、单向就是只有一个主表更新从表才更新 从表更新主表不管。
我们来对比一下单向和双向
单向/双向 | User实体类中是否有List< Order> orders | Order实体类中是否有User user |
---|---|---|
单向多对一 | 无 | 有 |
单向一对多 | 有 | 无 |
双向一对多(双向多对一) | 有 | 有 |
五、关系映射关系目录
Hibernate关联关系映射目录
│
├─单向关联
│ ├─ 一对一外键单向关联
│ ├─ 一对一主键单向关联
│ ├─ 一对一连接表单向关联
│ ├─ 一对多外键单向关联
│ ├─ 一对多连接表单向关联
│ ├─ 多对一外键单向关联
│ ├─ 多对一连接表单向关联
│ └─ 多对多单向关联
└─双向关联
├─ 一对一外键双向关联
├─ 一对一主键双向关联
├─ 一对一连接表双向关联
├─ 一对多外键双向关联
├─ 一对多连接表双向关联
└─ 多对多双向关联
六、示例
这里使用两种方式来讲解:
1)XML
2)注解
(一)XML
hibernate 在实现ORM功能的时候主要用到的文件有:映射类(*. Java )、映射文件(*.hbm.xml)和 数据库 配置文件(*.properties/*.cfg.xml),它们各自的作用如下:
映射类 ( *.java ) :它是描述数据库表的结构,表中的字段在类中被描述成属性,将来就可以实现把表中的记录映射成为该类的对象了。
映射文件( *.hbm.xml ) :它是指定数据库表和映射类之间的关系,包括映射类和数据库表的对应关系、表字段和类属性类型的对应关系以及表字段和类属性名称的对应关系等。
数据库配置文件( *.properties/*.cfg.xml ) :它是指定与数据库连接时需要的连接信息,比如连接哪种数据库、登录数据库的用户名、登录密码以及连接字符串等。当然还可以把映射类的地址映射信息放在这里。
(二)、注解
在实体类中添加JPA的标准注解来进行对象关系映射.注解可以添加在属性上,也可以添加在getXxx()方法之上。
@Entity --注释声明该类为持久类。将一个Javabean类声明为一个实体的数据库表映射类,最好实现序列化.此时,默认情况下,所有的类属性都为映射到数据表的持久性字段.若在类中,添加另外属性,而非映射来数据库的, 要用下面的Transient来注解。
@Table(name="promotion_info") --持久性映射的表(表名="promotion_info).@Table是类一级的注解,定义在@Entity下,为实体bean映射表,目录和schema的名字,默认为实体bean的类名,不带包名.
@Id--注释可以表明哪种属性是该类中的独特标识符(即相当于数据表的主键)。
@GeneratedValue --定义自动增长的主键的生成策略.
@Transient --将忽略这些字段和属性,不用持久化到数据库.适用于,在当前的持久类中,某些属性不是用于映射到数据表,而是用于其它的业务逻辑需要,这时,须将这些属性进行transient的注解.否则系统会因映射不到数据表相应字段而出错.
@Temporal(TemporalType.TIMESTAMP)--声明时间格式
@Enumerated --声明枚举
@Version --声明添加对乐观锁定的支持
@OneToOne --可以建立实体bean之间的一对一的关联
@OneToMany --可以建立实体bean之间的一对多的关联
@ManyToOne --可以建立实体bean之间的多对一的关联
@ManyToMany --可以建立实体bean之间的多对多的关联
@Formula --一个 SQL 表达式,这种属性是只读的,不在数据库生成属性(可以使用sum、average、max等)
@OrderBy --Many端某个字段排序(List)
1、 hibernate单向一对一关联映射(one-to-one)
2、 hibernate单向多对一关联映射(many-to-one)
3、 hibernate单向一对多关联映射(one-to-many)
4、 hibernate单向多对多映射(many-to-many)
以上所述就是小编给大家介绍的《Hibernate 关系映射整理》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Hibernate 关系映射整理
- MyBatis从入门到精通(十一):MyBatis高级结果映射之一对多映射
- MyBatis从入门到精通(九):MyBatis高级结果映射之一对一映射
- 【mybatis xml】数据层框架应用--Mybatis(三)关系映射之一对一关系映射
- SpringMVC——请求映射
- ElasticSearch中的映射
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Java Concurrency in Practice
Brian Goetz、Tim Peierls、Joshua Bloch、Joseph Bowbeer、David Holmes、Doug Lea / Addison-Wesley Professional / 2006-5-19 / USD 59.99
This book covers: Basic concepts of concurrency and thread safety Techniques for building and composing thread-safe classes Using the concurrency building blocks in java.util.concurrent Pe......一起来看看 《Java Concurrency in Practice》 这本书的介绍吧!