Hibernate 级联 备忘

今日,实验了下,Hibernate的fetch=FetchType.Lazy(延迟加载)
延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。
这次收获颇多:
现在和大家一起分享.
Person 类:
private int person_id;
private String testName;

@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
private List<Book> books;

Book:private int testId;
private string bookName
Book类与Person类相关联

在查询时候:
person=getHibernateTemplate().load(Person.class,1);
当我是这样的输出语句时,
System.out.println(person.getTestName());
SQL语句是这样的:
select person0_.person_id as person1_1_0_, person0_.person_Name as person2_1_0_ from person person0_ where person0_.person_id=?
上面的语句:即就是查询本类Person的相关实体属性 (注意,它并不会查询Book类相关属性)

当出输出这样的语句时候。
System.out.println(((Book)((List<Book>)person.getBooks()).get(0)).getBookName());
它就会在查询语句中添加这样一条SQL语句,
select books0_.bId as bId1_, books0_.bookId as bookId1_, books0_.bookId as bookId0_0_, books0_.bookName as bookName0_0_, books0_.bId as bId0_0_ from book books0_ where books0_.bId=?
即根据 person_id数据索引去查询Book类相关属性。
我上网查资料,有人建议这样:
对于集合尽量使用Lazy,对于对象可以使用EAGER
但是我个人认为这个也不能那么准确的定义它。还是要根据项目需求来定义选用哪种加载方式
的确,延迟加载给我们带来了数据性能的提高。
下面是加载的几种方式:
Hibernate的数据加载方式:(转自博客http://dsh.iteye.com/blog/417462)
1.即时加载 immediately loading
实体加载完成后,立即加载其关联的数据。
2.延迟加载lazy loading
实体相关联的数据在第一次访问时再进行读取。
3.预先加载 eager loading
与immediately loading类似,但实体和相关联的数据是通过一条sql同时读取。
4.批量加载 batch loading

还有就是Hibernate的缓存:
<cache usage=”read-only”/> 只缓存数据索引
<cache usage=”read-write”/> 缓存数据索引和集合实体
缓存在数据库数据性能上体现得很好。
我先去实践,再根据自己实践谈谈缓存机制。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值