Hibernate第三章

来源:互联网 发布:excel解密码软件 编辑:程序博客网 时间:2024/05/01 04:51

数据库三种映射

一对一:一个人对应一个身份证号
一对多:一个老师对应多个学生
多对多:学生表和课程表

Hibernate 持久类的关联关系

员工和部门:多对一关系
员工类(多的一方增加一的一方的对象)中增加部门对象
部门类(少的一方增加多的一方的集合)中增加员工List

多的一方为集合,初始化到少的一方,少的一方中的配置文件中加节点
少的一方为对象,初始化到多的一方,多的一方中的配置文件中加节点<many-to-one>

一对多都可以双向

掌握一发Eclipse快捷键:ctrl+shift+x 转为大写、ctrl+shift+y 转为小写

配置 Emp 到 Dept 的多对一关联

Emp 持久化类public class Emp implements Serializable {    ……    private Dept dept;  // 省略其他属性及getter、setter访问器}
Emp.hbm.xml<class  name="cn.hibernatedemo.entity.Emp"  table="`EMP`">    ......    <!--         name 一的一方的对象名           class 对象所对应的全类名             column 数据库的外键列名        cascade 级联操作         -->    <many-to-one name="dept" class="com.cfn.entity.Dept" column="deptno" cascade="save-update"></many-to-one>o.entity.Dept"  /></class>

//一的一方private Set<Street> set = new HashSet<Street>();
//多的一方不写外键 实体类在<set>标签中配置cascade属性Inverse:只能在集合<Set>标签中设置设为:true 由many方控制//比如说删除部门下面的所有员工inverse属性指定了关联关系中的方向inverse设置为false,则为主动方,由主动方负责维护关联关系,默认是false inverse设置为true,不负责维护关联关系1. 在建立两个对象的双向关联时,应该同时修改两个关联对象的相关属性2. 建议inverse设置为true

Cascade:需要级联操作的地方,都可以配置该属性

cascade属性值 描 述 none (不级联)当Session操纵当前对象时,忽略其他关联的对象。它是cascade属性的默认值 save-update (保存或者修改的时候)当通过Session的save()、update()及saveOrUpdate()方法来保存或更新当前对象时,级联保存所有关联的新建的瞬时状态的对象,并且级联更新所有关联的游离状态的对象 merge (同上)当通过Session的merge()方法来保存或更新当前对象时,对其关联对象也执行merge()方法 delete (删除时级联)当通过Session的delete()方法删除当前对象时,会级联删除所有关联的对象 all (保存、删除、修改都级联)包含所有的级联行为

Fetch 抓取策略

fetch = “select” lazy = “false”
不采用延迟策略,不使用关联信息也会查询出来;

fetch = “select” lazy = “true”
采用延迟策略,不会查询出来关联信息,使用的时候才会查询

fetch = “join” lazy = “false” 产生关联查询

HQL的连接查询

连接类型 HQL语法 内连接 inner join 或 join 迫切内连接 inner join fetch 或 join fetch 左外连接 left outer join 或 left join 迫切左外连接 left outer join fetch 或 left join fetch 右外连接 right outer join 或 right join

左外链接 :from之后的先
右外链接:join之后的先
内连接:关联可以放到where语句中

原创粉丝点击