hibernate的一点总结

ORM框架核心概念解析
本文详细阐述了ORM框架中对象的三种状态、关联关系的多种类型、load与get的区别、1+N问题及其解决方法、list与iterate的区别以及cascade与fetch的作用。

一、关于对象的三种状态:

1、transient (内存有,数据库没有,没有ID) 2、persistent(数据库有,内存有,缓存也有 有ID) 3、detached.(数据库有,内存有,缓存没有,有ID)

二、关于关联

1、one2one_uni_fk @oneToOne@JoinColumn(name="XXXid")

2、one2one_bin_fk @OneToOne @JoinColunm(name="XXXid")  另一方@oneToOne(mappedBy=“XXX”)


3、many2one_uni    @manyToOne 

4、one2many_uni  @OneToMany @JoinColumn(name="XXid")

5、one2many_many2one_bin @manyToOne 另一方 @oneToMany(mappedBy="XXX")

三、关于load与get的区别

1、get直接发出SQL语句去查询。


2、load是产生一个proxy(代理)对象,等到用到时再去查询,代理对象会随着session的提交而消失。

四、关于1+N问题

1、many2one 发出一条语句去查询时会先去查询要查询的东西,在发出N条去查询被关联的对象。

2、one2many发出一条语句去查询要查的东西的东西,再发出N条语句去查询被关联的对象。

3、使用iterate()方法也会产生1+问题,因为iterate()时当session没有所查询的东西是,就会到数据库去查,首先查的是ID,然后再发出N条语句将对象查出来。

4、解决方案1,fetch=FetchType.ERGER 改为 fetch=fetchType.LAZY;
 
解决方案2 @bathchSize(size=XX)

解决方案3 join fetch。

解决方案4 用criteria查询createCriteria(fromXXX.class) .

五、list()与iterate()的 区别

1、list发出一次查询取所有。

2、iterate先取ID,然后根据ID再取对象。

3、list第二次查询还是数据库去查询,发出SQL语句,iterate会到session里面找,不发出SQL语句。


六、关于cascade与fetch

1、cascade=cascadeType.ALL 负责CUD(增加、更新、删除),这样设置会关联到CUD。

2、fetch=FetchType.ERGER 会关联到被关联对象,设为fetch=fetchType.lazy 就不会。





















评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值