hibernate 总结2

hibernate 2(持久化态对象+维护+级联)

(1)hibernate中的持久化实体书写要求

1. 实体类不要使用final修改(因为hibernate会根据实体产生代理对象)  jdk和cglib产生代理对象
2. 实体类中有唯一的OID来与表中主键对应(hibernate中缓存要使用)
3. 尽量使用包装类型而不是普通类型(一些基本类型属性插入表中都会将默认值存入,而包装类型默认值是null)
4. 实体类成员变量提供get和set方法(标准的jpa要求属性提供get和set)
5. 提供无参构造(hibernate和jpa需要)
  补充说一点:投影new Customer(name,address)  select name,address from t_customer

(2)主键类型和主键生成策略

1. 主键类型
    自然主键和代理主键
    居民表1:id(主键),identityCardId(身份证id),name(姓名)
    居民表2:identityCardId(身份证id),name(姓名)
    居名表1中:id是代理主键
    居民表2中:身份证id是自然主键
2. 主键生成的常用类型(主键生成策略)
    主键赋值,是谁去负责给主键赋值?
    负责代理主键:identity(就是mysql auto_increment)/sequence(oracle中序列)/native/increment/uuid
    负责自然主键:assgined (不需要学习)
    注意:在实际过程使用最多的是identity/sequence/native/uuid(给所在表主键赋值,该主键的类型必须是字符串)

(3)持久化对象的三种状态

a>三种状态(用2个维度去衡量一个持久对象的状态:session管理+对象OID是否有值)

    瞬时态(没有oid值,没有交给session管理)
    持久态(有oid值,交给了session管理)  重点这里需要理解
    托管态(有oid值,没有交给了session管理)
     oid的值:创建实体中跟表主键映射的成员变量是否有值
     session管理:就是session去操作的所在范围的实体

     saveOrUpdate(){
        if(oid!=null){
            update();
        }else if(oid==null){
            save();
        }
     }

b>三种状态之间的切换

1. 瞬时态转换成持久化态:save(),saveOrUpdate()
2. 托管态转换成持久化态:update(),saveOrUpdate()
3. 其他情况转换成持久化态:get()/load()/find()/qbc 查询

(4)hibernate中的一级缓存

session对象有一部分(一级缓存)是存放数据缓存起来的,另外一部分(快照区)是将一级缓存中数据copy一个副本,然后修改保存

a>持久化对象去操作数据库

1. get()/load()/Query/
2. save()/update()/saveOrUpdate()
   以上操作都会将数据放到一级缓存中,此时我们可以理解成这些对象交给了session管理;
   通过修改缓存中数据(其实底层就是将缓存数据进行修改,提交事务时对比一级缓存和快照区是否相等,如果不相等就会发update操作)
注意:在实际开发过程中,对于update,delete操作,我们一般采取的步骤是先查询再去做操作。而不是创建一个对象通过赋值id来操作;

b>一级缓存常用的操作

1. 只有持久化态对象会放入到session一级缓存中
2. clear/evict/refresh介绍
        clear(): 清除session 一级缓存中所有对象
        evict(c):清除session 一级缓存中指定的对象
        refresh():从数据库同步到缓存中去
        save():保存对象到session中的一级缓存
3. 如果修改了session一级缓存中的数据,最后提交commit会对比快照区数据

(5)hibernate一对多关联配置及其操作

a>专业术语理解

1. 级联:cascade <set cascade="save-update"> <many-to-one cascade="">
2. 维护:inverse <set inverse="true">  

b>一对多关联实体及其映射文件配置

1. 单向关联操作
2. 双向关联操作
3. 对象导航
4. 级联操作

猜你喜欢

转载自blog.csdn.net/weixin_42425532/article/details/80979041
今日推荐