第三章
1.单一主键
assigned由Java应用程序负责生成(手工赋值)。
native由底层数据库自动生成标示符,如果是MySQL就是increment,如果是Oracle就是sequence,等等。
2.基本类型
Hibernate映射类型 | Java类型 | 标准SQL类型 | 大小 |
integer/int | java.lang.Integer/int | INTEGER | 4字节 |
long | java.lang.Long/long | BIGINT | 8字节 |
short | java.lang.Short/short | SMALLINT | 2字节 |
byte | java.lang.Byte/byte | TINYINT | 1字节 |
float | java.lang.Float/float | FLOAT | 4字节 |
double | java.lang.Double/double | DOUBLE | 8字节 |
big_decimal | java.math.BigDecimal | NUMERIC |
|
character | java.lang.Character/java.lang.String/char | CHAR(1) | 定长字符 |
string | java.lang.String | VARCHAR | 变长字符 |
boolean/yes_no/true_false | java.lang.Boolean/Boolean | BIT | 布尔类型 |
date | java.util.Date/java.sql.Date | DATE | 日期 |
timestamp | java.util.Date/java.util.Timestamp | TIMESTAMP | 日期 |
calendar | java.util.Calendar | TIMESTAMP | 日期 |
calendar_date | java.util.Calendar | DATE | 日期 |
映射类型 | Java类型 | 标准SQL类型 | 描述 |
date | java.util.Date或java.sql.Date | DATE | 代表日期:yyyy-MM-dd |
time | java.util.Date或java.sql.Time | TIME | 代表时间:hh:mi:ss |
timestamp | java.util.Date或java.sql.Timestamp | TIMESTAMP | 代表时间和日期:yyyymmddhhmiss |
calendar | java.util.Calendar | TIMESTAMP | 同上 |
calendar_date | java.util.Calendar | DATE | 代表日期:yyyy-MM-dd |
3.对象类型
映射类型 | Java类型 | 标准SQL类型 | MYSQL类型 | Oracle类型 |
binary | byte[] | VARCHAR(或BLOB) | BLOB | BLOB |
text | java.lang.String | CLOB | TEXT | CLOB |
clob | java.sql.Clob | CLOB | TEXT | CLOB |
blob | java.sql.Blob | BLOB | BLOB | BLOB |
Mysql不支持标准SQL的CLOB类型,在Mysql中,用TEXT,MEDIUMTEXT及LONGTEXT类型代表长度超过255的长文本数据。
4.组件属性
实体类中的某个属性属于用户自定义的类的对象
如:
< component name="address" class="Address">
< property name="postcode" column="POSTCODE"> </property>
< property name="phone" column="PHONE"> </property>
< property name="address" column="ADDRESS" > </property>
</component>
5.单表操作CRUD实例
save
update
delete
get/load(查询单个记录)
get与load的区别:
- 在不考虑缓存的情况下, get方法会在调用之后立即向数据库发出sq|语句,返回持久化对象。
load方法会在调用后返回一个代理对象。
该代理对象只保存了实体对象的id ,直到使用对象的非主键属性时才会发出sql语句。
- 查询数据库中不存在的数据时, get方法返回null,load方法抛出异常org.hibernate.ObjectNotFoundException
Hibernate一对多的映射
一对多
多对一
一对多关联
在数据库中,可以通过添加主外键表现一对多的关系
通过在一方持有多方的集合实现,即在“一”的一端使用<set>元素表示持有“多”的一端对象。
set元素的常用属性
属性 | 含义和作用 | 必须 | 默认值 |
name | 映射类属性的名称 | Y |
|
table | 关联类的目标数据库表 | N |
|
lazy | 指定关联对象是否使用延迟加载 | N | proxy |
inverse | 标识双向关联中被动的一方 | N | false |
单向多对一关联
多对一的关系和关系数据库中的外键参照关系最匹配,即在己方的表中的一个外键参照另一个表的主键
通过在多方持有一方的引用实现,需要在“多”的一端使用<many-to-one>配置
inverse属性
<set>节点的inverse属性指定关联关系的控制方向,默认由one方来维护。
关联关系中,inverse=”false”则为主动方,由主动方负责维护关联关系
在一对多关联中,只能设置one方的inverse为true,这将有助于性能的改善
cascade属性
当设置cascade属性不为none时,hibernate会自动持久化所关联的对象
cascade属性的设置会带来性能上的改动,需谨慎设置
属性值 | 含义和作用 |
all | 对所有操作进行级联操作 |
save-update | 执行保存和更新操作时进行级联操作 |
delete | 执行删除操作时进行级联操作 |
none | 对所有操作不进行级联操作 |