hibernate 一級緩存
1 hibernate 一級緩存
Session?
? evict(Object o) 從緩存中清除指定的持久化對象
? clear()???????? 清除緩存中所有對象
2 批量更新于批量刪除
? 1) 批量更新
?? Iterator customers=session.find("from Customer c where c.age>0");
?? while(customers.hasNext()){
???? Customer customer=(Customer)customers.next();
???? customer.setAge(customer.getAge()+1);
?? }
?? tx.commit();
?? session.close();
? 缺點:內存中加載了大量數據
??????? 執行了多次update 語句
?
?? 改進
?? Iterator customers=session.find("from Customer c where c.age>0");
?? while(customers.hasNext()){
???? Customer customer=(Customer)customers.next();
???? customer.setAge(customer.getAge()+1);
???? session.flush();
???? session.evict(customer);
?? }
?? tx.commit();
?? session.close();
?? 遺留問題
?? 執行了多次update 語句
??
?? 采用jdbc api 進行調用
?? Connection con=session.connection();
?? PrepareStatement stmt=con.prepareStatement("update customers set age=age+1 where age>0");
?? stmt.executeUpdate();
?? tx.commit();
?? 另外,也可以調用底層的存儲過程進行批量更新
?? create or replace procedure batchUpdateCustomer(p_age,in number) as
?? begin
????? update customer set age=age+1 where age>p_age;
?? end;
??
?? tx=session.beginTransaction();
?? Connection con=session.connection();
?? CallableStatement cstmt=con.prepareCall(batchUpdateCustomer);
?? cstmt.setInt(1,0);
?? cstmt.eqecuteUpdate();
?? tx.commit();
?? 2) 批量數據的刪除
??? session.delete("from? Customer c where c.age>0");
??? 實際調用的過程
??? session * from Customer where age>0;
??? 在把所有數據加載到內存之后執行多條delete 語句
??? delete from customer where id=i;
???? .......................
?? 改進辦法采用jdbc api 進行批量數據的刪除
?????
?? tx=session.beginTransaction();
?? Connection con=session.connection();
?? con.execute("delete from customers where age>0");
?? tx.commit();
posted on 2006-09-14 09:22 康文 閱讀(466) 評論(0) 編輯 收藏 所屬分類: java