Hibernate框架Day6

2026/4/26 0:17:28

延迟加载:hibernate在调用查询方法后,不会立即的执行sql语句 把对应的数据库中的数据查询出来,只有当用户明确的需要使用非主键数据时,才会发送sql语句进行查询

延迟加载的分类

1 一般属性的延迟加载

一般属性的延迟记载 发生在 session.load(class,pk)进行的查询操作中 好处:

某些只需要使用pk进行操作的代码中,一般属性的延迟加载可以减少内存占用

典型应用场景:获得主键设置关系的操作

UserDAO{

public void deleteUser(int id); }

HibernateUserDAO{

public void deleteUser(int id){

//User user = session.load(User.class,id); User u = new User(); u.setId(id); session.delete(u); } }

注册员工的应用场景

注意:session.get() session.load();

区别:1 get立即加载 load一般属性延迟加载

2 如果传入的主键参数不存在 get()可以执行查询 但是返回 null load()抛出异常

2 关系属性的延迟加载

普遍存在存在延迟加载

一个对象的关系属性 会进行延迟加载 只有当需要使用关系属性中非id的属性值时,hibernate才会发送sql语句查询关系属性的内容 好处:

当只需要使用本对象相关数据时,关系属性进行延迟,减少不别要的内存占用

注意:session.load(Dept.class,1) 一般属性 关系属性的延迟加载

session.get(Dept.class,2) 只有关系属性延迟加载

3 延迟加载原理:

Teacher t = (Teacher)session.load(Teacher.class,1); t.getName();

hibernate通过动态字节码技术(早期 cglib技术 现阶段 javassist技术) 动态生成的一个 Teacher类的子类 hibernate:

HibernateTeacher extends Teacher{

@Override

public String getName(){

连接数据库 发送sql命令查询的代码 return name; }

@Override

public String getSalary(){ } }

4 延迟加载异常

当延迟加载一个数据时,在事务提交后,在进行加载,就会产生延迟加载异常,主要原因在于事务提交session关闭 解决延迟加载异常:

1 扩大事务边界:把延迟加载的代码放置到事务的内部 Spring OpenSessionInView

2 fetch迫切连接:关系属性的延迟加载

inner join

left outer join 使用 重复数据 LinkedHashSet过滤

3 改变延迟加载的默认策略

不让延迟

1 不让一般属性延迟加载

3 Hibernate继承关系映射

?

继承关系映射概念:t

实体间的关系2类

1 关联关系映射 1:1 1:* *:* has a 2 继承关系 (了解) is a

?

什么情况下会出现实体间的继承关系

Teacher extends Employee{


Hibernate框架Day6.doc 将本文的Word文档下载到电脑
搜索更多关于: Hibernate框架Day6 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219