Hibernate学习笔记

本文探讨了Hibernate中各种关联关系的实现方式及其特点,包括单向一对多、双向一对多及多对多关联,并讨论了如何使用内连接查询及缓存策略优化数据库访问效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hibernate中的关联
1. 单向一对多
   主控方一般在“一”的一方,并且cascade设置为“all”
   但是执行一次插入操作,会要执行两条sql语句,比如:
   User 和 Address的关系,给一个user增加一个address,会执行下面的SQL:
   insert into Address(address,zipcode,tel) values('HongKong','410083','1123')
   update address set user_id = 1 where id = 7
2. 双向一对多
   主控方一般在“多”的一方,并且由多的一方来维持关联,并且只要执行一条SQL语句既可以
3. 多对多关联
   通常要借助另外的一张表来保存关联。
   并且要根据情况采取延迟加载(Lazy loading)来避免无谓的开销,cascade的值应该设置为“save-update”,因为对于多对多关联,很少出现删除一方需要级联删除所有关联数据的情况。 

HQL中的联合查询
 1. inner join:将进行连接的表以建立连接的依据为中心,将这些表取交集,交集就是内连接的结果。
作用就是找出在两张表中都有的记录。
 2. left outer join
 3. right outer join
 连接的动作和内连接一样,结果不同。将表进行交集之后,取交集中的记录以及某表中除交集之外的所有记录。包括左连接和右连接。
 4. full join
 例如:from TUser user inner join fetch user.addresses
 fetch关键字的作用:表明TAddress对象读出后立即填充到对应的TUser对象中


Hibernate的持久化实现
实体对象声明周期
 1. 自由状态 (Transient)
 2. 持久状态 (Persistent)
 自由状态的对象通过Session.save方法转换为Persistent状态.如果以一个实体对象与某个
Session实例发生了关联,并处于对应Session的有效期内,那么它就处于Persistent状态
 3. 游离状态 (Detached)
 处于Persistent状态的对象,其对应的Session实例关闭之后,久处于游离状态
 可以通过Session.update方法将游离对象与Hibernate相关联.
 从持久状态-->自由状态的转变,一般由session.delete方法完成

VO与PO
VO(Value Object)值对象
PO(Persistence Object)持久对象
二者的区分是由"实体对象是否被纳入Hibernate实体管理容器",非管理对象称VO,而被
管理对象称为PO
VO通常被用作DTO(Data Transfer Object)
而PO则用在MVC模式的模型层

 

 实体对象识别
org.hibernate.engine.Key封装了Hibernate用于区分两个实体对象的识别信息

脏数据检查:一个数据对象所携带的信息发生了改变之后的状态
 脏数据检查的一般策略:
      数据对象监控:通过拦截器对数据对象的设置方式(setter进行拦截)
      数据版本对比:在持久层框架中维持数据对象的最近读取版本


数据缓存
 缓存是数据库数据在内存中的临时容器,它包含了库表数据在内存中的临时拷贝
位于数据库与数据访问层之间
数据缓存策略(三个层次)
      事务级缓存: 基于Session生命周期实现的
      应用级/进程级缓存: 在SessionFactory层实现,所有有SessionFactory创建的Session实例共享此缓存
      分布式缓存: 由国歌应用级缓存实例组成集群,任何一个实例的数据修改操作,将导致整个集群间的数据状态同步

Hibernate数据缓存
      内部缓存(Session Level )
      二级缓存(SessionFactory Level)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值