Hibernate关联映射,级联(cascade),抓取策略(fetch)

来源:互联网 发布:数据分析ppt图片 编辑:程序博客网 时间:2024/06/05 12:48

Hibernate关联映射

  1. 定义:对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术;
  2. 单向关联映射:(只能通过一方查找到另一方,反之不行)
    a)一对一:mang-to-one
    b)多对一:many-to-one
    c)一对多:一的一方用set集合包含多的一方one-to-many;
  3. 双向关联映射:(双方都可查找到)
  4. 基于主键的关联映射:

级联操作cascade:多的一方维护关系效率比较高;

  1. 当对数据对象进行增删改操作时,如果数据对象有关联对象时,是否需要对关联对象进行同步操作.
  2. 映射文件配置cascade:save-update/delete/All,然后将数据对象加入set集合,进行添加;save方式为显示操作,级联的方式操作数据为隐式操作;
  3. 反向控制(inverse):只处理双向的映射关系指定谁去维护这个关系;
    a)True:不维护关系;
    b)False:维护关系;
    c)Default:false维护关系;
    d)Inverse是外键,cascade是对象;
  4. 多对多:(会有一张中间表)集合和集合
    a)建立关系,相当于在第三张表中插入一行数据
    b)解除关系,相当于在第三张表中删除一行数据
    c)重新建立关系,相当于先删除一行数据,再增加一行数据
    d)多对多,谁维护关系效率都一样
  5. Session的产生方式:
    a)SessionFactory.openSession():每次执行都会打开新的session效率低下;
    b)sessionFactory.getCurrentSession(),ThreadLocal当前线程获取session; 在hibernate.Cfg.xml配置current_session_context_class将事务和session强制绑定在一起了,CRUD操作必须在事务的条件下执行,事務提交session自动关闭;

抓去策略(fetch:Hibernate提供的一种优化方式而已)

  1. 怎么样提取集合的,该策略应该作用与set元素上;
    a)Join:左外连接,需要一次性把两张表的数据全部提取出来,用join效率比较高;
    b)Select:默认值,会导致n+1条sql语句
    c)Subselect:ql语句中含有子查询,则用subselect效率比较高;
    d)Batch fetching:

即时加载:指当查询数据时直接将该数据从数据库中查询(get);
懒加载(lazy:需要用到数据的时候才进行加载)

  1. 类的延迟加载class:默认为延迟加载
    a)True:默认值
    b)False:
  2. 集合的延迟加载set:
    a)True:默认值;
    b)False:
    c)extra:要什么就加载什么,如求大小、平均数、和等;
  3. Many-to-one:(不常用,效率没多大影响)
    a)False:默认值,不使用懒加载;
    b)Proxy:
    c)no-proxy:
  4. Set集合
    当fetch为join时,lazy失效
    当fetch为select时
    如果lazy为true/extra
    当遍历集合的时候,发出加载集合的sql语句
    如果lazy为false
    当获取班级的时候,发出加载集合的sql语句
    当fetch为subselect时和上面的情况一致。
0 0
原创粉丝点击