Hibernate---我的Hibernate学习笔记(三)

2014-11-24 01:08:47 · 作者: · 浏览: 8
er的值的改变会反映到数据库中 -->

"多"方的配置:

name="customer"

class="many_to_one.vo.Customer"

column="customer_id"

not-null="true"

cascade="save-update"

/>

cascade属性:设定级联操作(插入、修改、删除)。

cascad属性值

描述

none

保存、更新或删除当前对象时,忽略其他关联对象,默认属性值

save-update

通过Session的save()、update()以及saveOrUpdate()方法来保持、更新当前对象时级联,所有关联的新建对象,并且级联更新所有有关联的游离对象

delete

当通过Session的delete()方法来删除当前对象时,级联删除所有关联对象

all

包含所有的save-update以及delete行为

delete-orphan

删除所有和当前对象解除关联关系的对象

all-delete-orphan

包含all与delete-orphan的动作

inverse属性:表示是否将当前属性的值的变化反映到数据库中去。

false --- 表示反映到数据库

true ---表示不反映到数据库中

Set的lazy属性:

A.不设置lazy值,默认true 现象:查询Customer时,不会主动查询关联表Orders(SQL语句)

B.设置lazy=false 现象:出现查询Orders表的SQL语句

3、多对多

默认情况下,由两方共同维护关联关系。也就是两个对象关联属性的值的改变都会反映到数据库中。

九、 Hibernate控制的事务

事务保证原子操作的不可分,也就是操作的同时成功或同时失败。

hibernate的事务隔离级别和JDBC中大致相同。

设置时要在hibernate.cfg.xml配置

4

1: 读未提交的数据(Read uncommitted isolation) 脏读

2: 读已提交的数据(Read committed isolation) 不可重复读

4: 可重复读级别(Repeatable read isolation) 幻读

8: 可串行化级别(Serializable isolation)

hibernate的锁(悲观锁,乐观锁)

1.悲观锁是由数据库本身所实现的,会对数据库中的数据进行锁定,也就是锁行。(更新期间不许其他人更改)

LockMode.UPGRADE,修改锁,在get()方法中加上这个设置作为第三个参数。

LockMode.NONE 无锁机制

LockMode.READ 读取锁

LockMode.WRITE 写入锁,不能在程序中直接使用

还可以使用Session.lock() Query.setLockMode() Criteria.setLockMode()方法来设置锁,检测版本号,一旦版本号被改动则报异常。

2.乐观锁,也就是通过对记录加上某些信息来解决并发访问的问题。(认为更新期间不会有其他更改)

版本检查;要在其表中多加上一列表示版本信息,会在读取时读到这个版本号,并在修改之后更新这个版本号;

更新瞬间加锁,并且只有版本号相同才会予以更新,如果版本号不同,就会抛出例外。