hibernate的一對多關聯
阿新 • • 發佈:2018-12-18
- 什麼是關聯(association) 1.1 關聯指的是類之間的引用關係。如果類A與類B關聯,那麼被引用的類B將被定義為類A的屬性。例如: public class A{ private B b = new B; public A(){} } 傳統的jdbc要查有關係的兩張表,一般就是同連表查詢 Hibernate就不要需要,它只需要維護實體類,表達清楚表與表之間的關係即可。 倆張表 ,列如: Class Order(){ Private String oid; … Private Set orderIterm; } 可以通過get(),它會自動導航把orderIterm也查詢出來了 Session.get(Order.class,1)
2.1 級連查詢 報錯:懶載入 Could not initialize proxy - no session 如果在配置檔案中把它改為 Lazy=true; 查單個時存在問題 改為 Lazy=false; 查所有時存在問題 解決辦法:通過欄位控制,強制載入。 這是程式碼解決:重點是Hibernate.initialize
在實體類中定義一個引數 private Integer initOrderItem=0;//0代表懶載入 1代表立即載入 然後去dao方法中判斷它是不是需要強制載入 if(o!=null&&new Integer(1).equals(order.getInitOrderItem())) { Hibernate.initialize(o.getOrderItems()); //預設強制載入 }
3.1普通刪除 先查在刪 先把訂單項刪掉,在刪訂單
4.1級聯新增: 1.在實體類中描述表與表之間的關係 注意:定義一對多的關係時一定需要採用介面的方式,不許使用實現類
//implements java.util.Set 代理實現的是set介面
private Set<OrderItem> orderItems=new HashSet<OrderItem>();
一個訂單對應著多個訂單項 一個訂單項對應著一個訂單