Hibernate实体映射
2016-04-15 15:20
169 查看
概述
Hibernate通过映射,将实体类与数据库产生联系,通常使用的是XML配置文件方式和@注解方式在JPA出现之后,推荐使用@注解配置,会少一些配置文件,显得更简洁
通过@注解配置
一个实体,一般有id、普通属性、集合属性等,分别对应数据库主键、普通列、外键。实体 | 注解@Entity @Table | 数据库 |
---|---|---|
id | @Id @GeneratedValue | 主键 |
普通属性 | @Column | 普通列 |
集合属性 | 外键 |
@Temporal日期类型
注意
实体的主键最好不要使用int long等,而应使用String、Integer、Long等可以为null值的类型实体类最好是有主键,并且有对应的getter和setter方法
当列名与属性名相同时,@Column可以省略。
主键生成规则
注解支持的规则:strategy=
GenerationType.AUTO:自动方式;
GenerationType.TABLE:指定表
GenerationType.SEQUENCE:使用Sequence决定
GenerationType.IDENTITY:使用identity类型主键
XML支持的规则:
native:相当于AUTO
identity:相当于IDENTITY
sequence:相当于SEQUENCE
increment:自增长类型,即使Oracle不支持也能通过Hibernate维护
hilo:用指定表给主键赋值,需要制定表名列名
seqhilo:基于sequence的hilo
uuid:使用uuid算法生成一个唯一值
@注解属性要点
@Column
有nullable、unique、insertable、updateable、length、columnDefinition、scale(整数)、precision(小数)。如果属性与对应的列名与属性名一致,@column可以省略
@Basic
默认是即时加载,假如为大文本类型或者LOB类型,可配置为延迟加载。fetch=FetchType.LAZYoptional配置该列是否可以为null,true/null
@Temporal
类型有DATE\TIME\Timestemp@Transient
不会保存到数据库,让Hibernate区别对待这个属性假如是不存储到数据库的属性一定要加上这个注解。
乐观锁
Hibernate中有一种特殊的属性:(版本)Version属性。Version不参与业务逻辑,用来保证不会有两个线程同时对数据进行写操作。Version是对乐观锁的一种实现
(在实际编程中,开发者并不需要关注悲观锁乐观锁的实现细节,只需要配置一下就可以了)
@Version private int version;
拓展乐观锁与悲观锁
在现代编程中,更倾向于使用乐观锁悲观锁:在传统的数据库编程中,程序修改数据时首先锁定数据,使其他程序无法修改该数据,修改完毕后释放数据锁。而因为锁定了数据行,被锁定的数据只能被一个线程使用。
乐观锁:为数据库增加一个version列保存当前数据的版本,程序修改了数据,就将version增加1。反之,如果version数值发生变化,则说明有程序修改了数据,需要重新读取数据,然后进行修改保存。乐观锁机制并不锁定数据行,使得可以多个线程同时访问一条数据,因此,乐观锁的效率要高于悲观锁。
相关文章推荐
- Hibernate Oracle sequence的使用技巧
- jsp Hibernate批量更新和批量删除处理代码
- jsp hibernate的分页代码第1/3页
- Struts2+Hibernate实现数据分页的方法
- Hibernate环境搭建与配置方法(Hello world配置文件版)
- JAVA+Hibernate 无限级分类
- SSH整合中 hibernate托管给Spring得到SessionFactory
- jsp hibernate 数据保存操作的原理
- hibernate中的增删改查实现代码
- 解决hibernate+mysql写入数据库乱码
- java优化hibernate性能的几点建议
- java Hibernate延迟加载
- hibernate 常用方法介绍
- 详解Java的Hibernate框架中的注解与缓存
- 浅析Java的Hibernate框架中的继承关系设计
- Hibernate实现批量添加数据的方法
- JQuery+Ajax+Struts2+Hibernate框架整合实现完整的登录注册
- 深入理解Hibernate中的flush机制
- 简要分析Java的Hibernate框架中的自定义类型
- 简单的手工hibernate程序示例