Hibernate第三章

数据库三种映射

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

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语句中

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值