• day31_Hibernate复习_03(补刀)


    一、多对多
        在对象中如何表达多对多关系: 
            两方都使用集合表达。即两个对象中互相持有对方的集合的引用。
        
        小结:
            <set name="本方引用的集合名称" table="中间表表名" >
                <key column="本方中间表列名称" />
                <many-to-many class="对方的完整类名" column="对方中间表列名称" />
            </set>        
        
        操作:
            inverse:本方是否要放弃维护外键关系(默认值是false)
            cascade:是否需要级联操作(有5个值)(没有默认值)
              save-update         级联保存和级联修改
          delete              级联删除
          delete-orphan       孤儿删除
          all                 save-update + delete
          all-delete-orphan    save-update + delete + delete-orphan
        
    二、检索策略
        1、类级别
            load方法    =>    受class元素上的lazy属性影响
        2、关联级别
           1> 一对多:根据客户去找订单
                fetch:
                    select       (默认值) 使用普通select语句查询集合内容
                    join         使用表连接语句查询集合
                    subselect    同时加载多个对象的集合时,使用子查询语句
                lazy:
                    true         (默认值)需要使用时才会去加载
                    false        立即加载
                    extra        极其懒惰,当调用集合的size时,Hibernate只会发送count语句
            小结:        
                使用join时,lazy属性失效,都是立即加载。
                使用select时,lazy属性正常。
                使用subselect,除了在加载多个集合时使用子查询语句外,其他同select。
            
            2> 多对一:根据订单去找客户
                fetch:
                    select       (默认值) 使用普通select语句查询集合内容
                    join         使用表连接语句查询集合
                lazy:
                    false        立即加载
                    proxy        交给对方的类加载策略决定,受class元素上的lazy属性影响
                    
        3、批量检索
            batch-size="n"       决定一次加载几个对象(客户)的集合数据
        
    三、查询总结
        1、get/load     根据oid进行检索
        2、对象导航图检索 
        3、Sql语句查询
        4、Hql语句查询
        5、Criteria查询(了解)
        
    四、连接池、事务、锁
        c3p0连接池
            1、导包,c3p0-0.9.1.jar 在 Hibernate 的类库中optional文件夹下
            2、在hibernate.cfg.xml 进行配置
            3、配置c3p0中的具体使用的参数
    
        事务
            隔离级别设置: hibernate.connection.isolation     1 2 4 8悲观锁
                读锁:select * from xxx lock in share mode;    =>    get(clazz, id, LockOption.READ);
                写锁:select * from xxx for update;            =>    get(clazz, id, LockOption.UPGRADE);
            乐观锁
                1、实体类中加入版本控制属性(类型是Integer)
                2、在Xxx.hbm.xml,配置上version元素
  • 相关阅读:
    Oracle的数据库,实例,服务名
    ubuntu14.04安装oracle 11g
    sqlldr导入导出需要注意的问题
    EOF字符串
    登录plsql developer时候出现连接串问题导致的下拉列表中没有出现tnsnames.ora文件中配置的那些服务
    Oracle导出数据中的prompt,set feedback 等是什么意思
    怎么给普通用户付给权限,让它能读取v$session表
    Oracle数据库状态
    管理子程序
    pl/sql developer安装与配置
  • 原文地址:https://www.cnblogs.com/chenmingjun/p/9306057.html
Copyright © 2020-2023  润新知