hibernate中一對多表關係操作(7)
阿新 • • 發佈:2019-02-01
1、基本操作,儲存客戶、聯絡人,並設定它們的關聯
public void test01(){ Session session = HibernateUtils.OpenSession(); Transaction tx = session.beginTransaction(); Customer customer = new Customer(); customer.setCust_name("傳播智客"); LinkMan lm1 = new LinkMan(); lm1.setLkm_name("黎活明"); LinkMan lm2 = new LinkMan(); lm2.setLkm_name("劉悅東"); //表達一對多,一個客戶下有多個聯絡人 customer.getLinkMens().add(lm1); customer.getLinkMens().add(lm2); //表達多對一,聯絡人屬於哪個客戶 lm1.setCustomer(customer); lm2.setCustomer(customer); //瞬時態-->持久態 session.save(customer); session.save(lm1); session.save(lm2); tx.commit(); session.close(); }
2、為客戶新增聯絡人
@Test public void test02(){ Session session = HibernateUtils.OpenSession(); Transaction tx = session.beginTransaction(); //獲得要操作的客戶 Customer customer = session.get(Customer.class, 1l); //建立聯絡人物件 LinkMan lm = new LinkMan(); lm.setLkm_name("郝強勇"); //將聯絡人新增到客戶物件中 customer.getLinkMens().add(lm); //設定聯絡人的客戶 lm.setCustomer(customer); //執行儲存 session.save(lm); tx.commit(); session.close(); }
3、為客戶刪除聯絡人
public void test03(){ Session session = HibernateUtils.OpenSession(); Transaction tx = session.beginTransaction(); //獲得要操作的客戶 Customer customer = session.get(Customer.class, 1l); //獲得要刪除的聯絡人 LinkMan lm = session.get(LinkMan.class, 3l); //將聯絡人從客戶物件中移除 customer.getLinkMens().remove(lm); //設定聯絡人的客戶為空 lm.setCustomer(null); tx.commit(); session.close(); }
一對多表操作進階---級聯操作:
一的一方的對映檔案配置:
<!-- 級聯操作:cascade save-update:級聯儲存 delete:級聯刪除 all:save-update+delete --> <set name="linkMens" cascade="save-update"> <key column="lkm_cust_id"></key> <one-to-many class="LinkMan"/> </set>
public void test01(){
Session session = HibernateUtils.OpenSession();
Transaction tx = session.beginTransaction();
Customer customer = new Customer();
customer.setCust_name("傳播智客");
LinkMan lm1 = new LinkMan();
lm1.setLkm_name("黎活明");
LinkMan lm2 = new LinkMan();
lm2.setLkm_name("劉悅東");
//表達一對多,一個客戶下有多個聯絡人
customer.getLinkMens().add(lm1);
customer.getLinkMens().add(lm2);
//表達多對一,聯絡人屬於哪個客戶
lm1.setCustomer(customer);
lm2.setCustomer(customer);
//瞬時態-->持久態,級聯儲存
session.save(customer);
//session.save(lm1);
//session.save(lm2);
tx.commit();
session.close();
}
2、級聯刪除
public void test04(){
Session session = HibernateUtils.OpenSession();
Transaction tx = session.beginTransaction();
//級聯刪除
Customer customer = session.get(Customer.class, 1l);
session.delete(customer);
tx.commit();
session.close();
}
目的:簡化操作,一般使用save-update,不建議使用delete。
3、關係維護
在儲存時,兩方都會維護外來鍵關係,關係維護了兩次,冗餘了。多餘的關係維護語句,顯然是客戶端在維護外來鍵關係。