hibernate基本映射
实体类---表
实体类中的普通属性---表字段
采用<class>标签映射成数据库表,通过<property>标签将普通属性映射成表字段
所谓普通属性指不包括自定义类、集合和数组等
注意:如果实体类和实体类中的属性和sql中的关键字重复,必须采用table或column重新命名
实体类的设计原则:
* 实现一个默认的(即无参数的)构造方法(constructor)
* 提供一个标识属性(identifier property)(可选)
* 使用非final的类 (可选) , 因为用lazy特性时会需要继承实体类。
* 为持久化字段声明访问器(accessors) ,就是get set方法
主键生成策略:
uuid、native和assigned
标签常用属性:
<class
name = "类名"
table = "表名" //默认和类名一样
discriminator-value = //以后继承映射介绍
dynamic-update = "true|false(default)" //DB update操作时,只更新改变过的字段
dynamic-insert = "true|false(default)" //DB insert操作时,只包含非空字段
batch-size = "N"
optimistic-lock = "none|vesion|dirty|all"
lazy = "true|false"
abstract = "true|false"
/>
<id // 必须要在class之后,而且是单一主键。复合主键用composite-id
name = "实体类属性"
column = "表中列名" //默认和name一样
type = "" //integer,long,short.float,double,character,byte,boolean,yes_no,true_false
length = "32" //表中字段长度
<generator class = "increment" // 集群不能用,只能在单一jvm中用,数字
"identity" // mysql... 数据库自增 数字
"sequence" // oracle... 数据库自增 数字
"uuid" // 由hibernate生成,32位字符串,不会重复
"native" // 自动辨别数据库(常用方式)
"assigned" // 手动分配
"foreign" // 用其他表的主键
/>
/>
<property
name = "实体类属性名"
column = "表的列名"
type = "" 同上
update = "true|false" // 是否出现在update语句中
insert = "true|false" // 是否出现在insert语句中
lazy = "true|false"
unique = "true|false" // 这个字段的唯一性
not-null = "true|false" // 是否可以为空
length = "" // 字段长度
/>