AI Academy
促销
CodeGym University
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题
课时
评论
关于我们
开始
开始学习
立即开始学习
我的进度
课程
任务地图
课程
Java
SQL & Hibernate
级别 14
延迟加载
SQL & Hibernate
等级 14,
课时 0
1.1 问题背景 当您开始使用真实的数据库时,您会立即记住这句话“过早的优化是万恶之源”。只是现在你以消极的方式记住了她。使用数据库时,优化是必不可少的。您需要在设计阶段就已经使用它。 Hibernate 使得使用数据库非常方便。@OneToMany只需正确注释和,您就可以轻松获得任何子对象@ManyToMany。例子:
映射集合时的延迟加载
SQL & Hibernate
等级 14,
课时 1
2.1 获取选项 Hibernate 的开发人员很早就知道加载子实体的问题。所以他们做的第一件事就是在注释中添加一个特殊的提取@OneToMany参数,@ManyToMany。 该参数可以取两个值: 渴望的 懒惰的 例子: @OneToMany(fetch = FetchType.LAZY, mappedBy = "user")
LazyCollectionOption.EXTRA
SQL & Hibernate
等级 14,
课时 2
了解 LazyCollectionOption.EXTRA 但最令人感兴趣的是 LazyCollectionOption.EXTRA 值。如果您将它指定为@LazyCollection注释的值,那么 Hibernate 将尽可能长时间地延迟加载集合的元素。 如果您尝试获取集合中的元素数量: User user = session.load(User.class, 1);
加入获取
SQL & Hibernate
等级 14,
课时 3
问题描述 正如我们上面所说, LazyCollectionOption.EXTRA注解有一个问题——它为每个对象对数据库执行单独的请求。我们需要以某种方式向 Hibernate 解释我们希望它立即为我们的父对象加载所有子对象。 Hibernate 的开发者想出了解决这个问题的方法, HQL 中的join fetch operator 。 HQL查询示例: select distinct task from Task t left join fetch t.employee o
Hibernate 中的数据缓存
SQL & Hibernate
等级 14,
课时 4
永远不要编写缓存解决方案 另一种加快数据库工作的方法是缓存我们之前已经请求过的对象。 重要的!永远不要编写自己的缓存解决方案。这项任务有很多你做梦也想不到的陷阱。 问题 1 -缓存刷新。有时,当需要从缓存中删除对象或在缓存中更新对象时,会发生事件。胜任地做到这一点的唯一方法是通过缓存引擎将所有请求传递给数据库。否则,每次你都必须明确地告诉缓存应该删除或更新其中的哪些对象。 问题 2 -内存不足。在您发现内存中的对象占用大量空间之前,缓存似乎是个好主意。您需要额外的数十 GB
配置二级缓存
SQL & Hibernate
等级 14,
课时 5
并发策略 在 Hibernate 中启用二级缓存后,您需要向 Hibernate 说明我们要缓存哪些 Entity 对象以及如何缓存。 为此,Hibernate 为实体类提供了一个特殊的注释 - @Cache。例子: @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) 需要为我们要为其使用二级缓存的每个 Entity 实体编写此注释。例子: @Entity
自定义查询缓存
SQL & Hibernate
等级 14,
课时 6
为什么需要查询缓存 让我们用 HQL 中的员工重写我们的例子: Employee director1 = session.createQuery("from Employee where id = 4").uniqueResult();
设置缓存引擎
SQL & Hibernate
等级 14,
课时 7
设置缓存 让我们回到 hibernate.cfg.xml 文件中的缓存设置:
Please enable JavaScript to continue using this application.