Hibernate主要检索策略主要有即时检索, 延迟检索, 批量检索(batch-size), 迫切左外连接检索(outer-join)。
即时检索, 延迟检索, 批量检索分为类级别和级联级别。
只有LOAD方法可以使用类级别的延迟检索,get() 和 find()将忽略类级别的延迟检索, 总使用即时检索策略。
find()还同时忽略级联级别的迫切左外连接检索(一对多, 多对多情况下)。
LOAD()在类级别的延迟将建立一个代理对象。 set将一直设立一个代理对象(实现SET)然后用代理对象指向实际应用。
HIBERNATE.PROPERTIES中的 maz-fetch-depth可以指定迫切左外连接的层次结构。
如果不实用迫切左外连接, 则对每条级联的检索数据会产生一天SELECT语句, 这样SELECT语句数目太多会影响性能, 但是外连接的过多, 会涉及到表与表之间的关联等等, 需要 在SELECT数目与外连接上做一个权衡。
如果一个映射文件中有很多个SET, 只有一个SET 的OUTER-JOIN可以为TRUE(HIBERNATE实现, 为了提高性能.
一般在类级别采用立即检索, 在一对多, 或多对多情况下采用延迟检索, 在一对一, 多对一下采用迫切左外连接检索。
可以在代码中指定检索策略。
get()如果级联的对象为空则返回NULL值。
为什么不才用SQL语言进行检索?
需要封装成对象, 检查内存中有无重复的对象。
find()方法只能进行静态查询, 将被QUERY接口所取代!