標籤:發送 預設 fetch bsp 架構 str for 基本 extra
1. 查詢策略:使用Hibernate查詢一個對象的時候,查詢其關聯對象.應該如何查詢.是Hibernate的一種最佳化手段!!!
2. Hibernate架構的檢索策略解決的問題
* 查詢的時機
Customer c1 = (Customer) session.get(Customer.class, 1);
System.out.println(c1.getLinkmans().size());
* lazy屬性解決查詢的時機的問題,需要配置是否採用消極式載入!!
* 查詢的語句形式
List<Customer> list = session.createQuery("from Customer").list();
for(Customer c : list){
System.out.println(c.getLinkmans()); }
* fetch屬性就可以解決查詢語句的形式的問題!!
set標籤上配置策略
1. 在<set>標籤上使用fetch和lazy屬性
* fetch的取值 -- 控制SQL語句產生的格式
* select -- 預設值.發送查詢語句
* join -- 串連查詢.發送的是一條迫切左外串連!!!配置了join.lazy就失效了
* subselect -- 子查詢.發送一條子查詢查詢其關聯對象.(需要使用list()方法進行測試)
* lazy的取值 -- 尋找關聯對象的時候是否採用延遲!
* true -- 預設.延遲
* false -- 不延遲
* extra -- 及其懶惰,
查詢關聯對象的時候 採用比消極式載入更懶惰的方式進行查詢.
2. set標籤上的預設值是fetch="select"和lazy="true"
3. 總結:Hibernate架構都採用了預設值,開發中基本上使用的都是預設值。特殊的情況。
many-to-one標籤上配置策略
1. 在<many-to-one>標籤上使用fetch和lazy屬性
* fetch的取值 -- 控制SQL的格式.
* select -- 預設。發送基本select語句查詢
* join -- 發送迫切左外串連查詢
* lazy的取值 -- 控制載入關聯對象是否採用延遲.
* false -- 不採用消極式載入.
* proxy -- 預設值.代理.現在是否採用延遲.
* 由另一端的<class>上的lazy確定.如果這端的class上的lazy=”true”.proxy的值就是true(消極式載入).
* 如果class上lazy=”false”.proxy的值就是false(不採用延遲.)
2. 在<many-to-one>標籤上的預設值是fetch="select"和proxy
Hibernate架構對查詢功能最佳化(2)