1. 程式人生 > >hibernate的一對多關聯

hibernate的一對多關聯

  1. 什麼是關聯(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>();

一個訂單對應著多個訂單項 一個訂單項對應著一個訂單