zoukankan      html  css  js  c++  java
  • 浅谈Hibernate框架(一)——.hbm.xml中的配置

    Hibernate一枚“全自动”的ORM框架;

    用IDE工具集成Hibernate会自动生成:

    以.hbm.xml为后缀结尾的配置文件+ POJO类 + Dao类

    主键查询:

    Session.load(class , id): 失败返回异常

    Session.get(class , id): 失败返回null

    注:class-运行时类    id-主键

    区别:

    load()方法可返回实体的代理类实例,而get方法永远直接返回实体类。

    load()默认为懒加载,而get不管怎样设置都是立即加载;

    级联的设定: cascade

    当通过一个表去操作另一个表时,就需要进行所谓级联的设定,即指定cascade属性的取值

    Cascade 属性取值范围:

      none:在保存、删除修改对象的时候,不考虑其附属物的操作

       save-update:在保存、更新当前对象时,级联保存、更新附属物。

      delete:在删除当前对象时,级联删除附属物。

      all: 包含save-update和delete的操作  

    举个栗子:

          假如customer表和Orders表存在一对多关联:

          那么就需要在Orders表的.hbm.xml中这样配置:

       <set name="orders"      outer-join="true"        cascade="all"

             lazy="false"         batch-size="3"         inverse="true"  >

             <key column="CUSTOMER_ID"/>

             <one-to-many class="com.weikun.po.Orders"/>

    </set> 

     扩展解释:

    lazy:设置关联级别上的属性,取值:false,true

    inverse:关联关系的工作由谁负责,false:默认值,表示由主控方负责;true为被控方负责。

    batch-size:批量检索功能,设定批量检索尺寸。

    outer-join="true"在关联级别上设置为迫切左外连接检索

    constrained:约束

    catalog:目录

    alias:别名

    fetch:  设置"select" 和  "join"

    用一对多关系来说明‘select’和‘join’的区别:

    fetch = "select"是在查询的时候先查询出一那端的实体,然后在根据一端的查询出多那端的实体,会产生1+n条sql语句;

    fetch = "join"是在查询的时候使用外连接进行查询,同时把一端和多端都查询出来了,不会产生1+n的现象。

    lazy 和fetch配合使用的问题:

    1、当lazy="true" fetch = "select" 的时候 , 这个时候是使用了延迟策略,开始只查询出一端实体,多端的不会查询,只有当用到的时候才会发出sql语句去查询 ;

    2、当lazy="false" fetch = "select" 的时候 , 这个时候是使没有用延迟策略,同时查询出一端和多端,同时产生1+n条sql.

    3、当lazy="true"/lazy="false" fetch = "join"的时候,自己认为这个时候延迟已经没有什么用了,因为采用的是外连接查询,同时把一端和多端都查询出来了,延迟没有起作用。

    如果我引用您的博文记录,没有指出,请求您的原谅。可以私信告诉我,我一定改正! 注:我写博文的目的主要是记录得失,若有什么误人子弟的地方,请多多见谅指正;
  • 相关阅读:
    Linux
    memory库函数的实现
    剑指Offer面试题1
    Linux
    Linux-配置vim开发环境
    Linux-Find命令
    busybox,alphine,ubuntu,centos/fedore操作系统
    端口映射与容器互联
    docker 数据管理数据卷
    Celery
  • 原文地址:https://www.cnblogs.com/zhaojinxin/p/6596407.html
Copyright © 2011-2022 走看看