您的位置:首页 > 其它

Hibernate实体映射

2016-04-15 15:20 169 查看

概述

Hibernate通过映射,将实体类与数据库产生联系,通常使用的是XML配置文件方式和@注解方式

在JPA出现之后,推荐使用@注解配置,会少一些配置文件,显得更简洁

通过@注解配置

一个实体,一般有id、普通属性、集合属性等,分别对应数据库主键、普通列、外键。

实体注解@Entity @Table数据库
id@Id @GeneratedValue主键
普通属性@Column普通列
集合属性外键
使用@OneToMany @OneToOne @ManyToMany @ManyToOne配置实体间的关系

@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.LAZY

optional配置该列是否可以为null,true/null

@Temporal

类型有DATE\TIME\Timestemp

@Transient

不会保存到数据库,让Hibernate区别对待这个属性

假如是不存储到数据库的属性一定要加上这个注解。

乐观锁

Hibernate中有一种特殊的属性:(版本)Version属性。Version不参与业务逻辑,用来保证不会有两个线程同时对数据进行写操作。

Version是对乐观锁的一种实现

(在实际编程中,开发者并不需要关注悲观锁乐观锁的实现细节,只需要配置一下就可以了)

@Version
private int version;


拓展乐观锁与悲观锁

在现代编程中,更倾向于使用乐观锁

悲观锁:在传统的数据库编程中,程序修改数据时首先锁定数据,使其他程序无法修改该数据,修改完毕后释放数据锁。而因为锁定了数据行,被锁定的数据只能被一个线程使用。

乐观锁:为数据库增加一个version列保存当前数据的版本,程序修改了数据,就将version增加1。反之,如果version数值发生变化,则说明有程序修改了数据,需要重新读取数据,然后进行修改保存。乐观锁机制并不锁定数据行,使得可以多个线程同时访问一条数据,因此,乐观锁的效率要高于悲观锁。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hibernate