- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Hibernate:检索策略的学习1
Hibernate :检索策略的学习1
概述
检索数据,也就是查询数据是在⼀个系统中必不可少的⼀个功能。检索数据时的2个
问题:
1. 不浪费内 :例如,Customer和Order是双向1-N 的关系。当 Hibernate 从数据库
中加载 Customer 对象时, 如果同时加载所有关联的 Order 对象, ⽽程序实际
上仅仅需要访问 Customer 对象, 那么这些关联的 Order 对象就⽩⽩浪费了许多
内 。
2. 更⾼的查询效率:发送尽可能少的 SQL 语句。
由于篇幅原因,将内容分为了两部分:
Hibernate :检索策略的学习1、Hibernate :检索策略的学习2
第⼀部分讲解了类级别的检索策略以及1-N和N-N 的检索策略,在第⼆部分中将学习
N-1和1-1的检索策略,并对检索策略进⾏总结。
类级别的检索策略
知识点
类级别可选的检索策略包括⽴即检索和延迟检索, 默认为延迟检索。
⽴即检索: ⽴即加载检索⽅法指定的对象;
延迟检索: 延迟加载检索⽅法指定的对象。在使⽤具体的属性时,再进⾏加
载。
类级别的检索策略可以通过 元素的 lazy 属性进⾏设置。
如果程序加载⼀个对象的⽬的是为了访问它的属性,可以采取⽴即检索;如果程序加
载⼀个持久化对象的⽬的是仅仅为了获得它的引⽤,可以采⽤延迟检索,但需要 意
懒加载异常 (LazyInitializationEx eption :简单理解该异常就是Hibernate在使⽤延迟加
载时,并没有将数据实际查询出来,⽽只是得到了⼀个代理对象,当使⽤属性的时候
才会去查询,⽽如果这个时候session关闭了,则会报该异常)!
下⾯通过⼀个例⼦来进⾏讲解:
Demo
在该Demo 中,我们只需要使⽤⼀个Customer 的对象即可,其中包含了id ,name等属
性。
延迟检索
⾸先我们来测试⼀下元素的lazy属性为true的情况,也就是默认情况 (不设置)。
public class HibernateTest {
private SessionFactory sessionFactory;
private Session session;
private Transaction transaction;
@Before
public void init() {
Configuration configuration = ne Configuration().configu
ServiceRegistry serviceRegistry = ne ServiceRegistryBuil
.applySettings(configuration.getProperties())
.buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(servic
session = sessionFactory .openSession();
transaction = session.beginTransaction();
}
@After
public void destroy() {
mit();
session.close();
sessionFactory .close();
}
@Test
public void testClassLevelStrategy() {
Customer customer = (Customer) session.load(Customer.clas
System.out.println(customer.getClass());
System.out.println(customer.getCustomerId());
System.out.println(customer.getCustomerName());
}
}
看⼀下上⾯的代码,该代码是利⽤Junit进⾏测试 (关于Ju
文档评论(0)