1. 程式人生 > >Hibernate:單項多對一雙向多對一

Hibernate:單項多對一雙向多對一

單項多對一

封裝類:

Dept.java

public class Dept {

    private Byte deptNo;

    private String deptName;

    private String location;

}

Emp.java:

public class Emp {    

    private Integer empNo;

    private String empName;

    private Dept dept;

}


在emp.hbm.xml中用

many-to-one來對映多對一的關聯關係

name:多的一端關聯一的一端的屬性名

class:一的一端屬性對應的類名



雙向多對一:

在dept封裝類寫了一個set集合

public class Dept {
    private int deptId;
    private String deptName;
    private Set<Emp> emp=new HashSet<Emp>();

}

在dept.hbm.xml中對映一對多的集合屬性使用set節點

name:集合對應的屬性名

table:set中的元素對應的記錄放在哪一個資料表中,該值需要和多對一的多的表名一致

key:指定多的表中的外來鍵列的名字


set三個屬性:cascade級聯、inverse反轉、order-by 

懶載入load 當沒有進行操作時load方法不會對資料庫操作沒有sql語句 但是有操作室就會有sql輸出

沒有操作時:

//懶載入沒有sql語句
public void testLoad(){

Emp emp=(Emp)session.load(Emp.class, 1);


  }


有操作輸出時:

//懶載入沒有sql語句
public void testLoad(){

Emp emp=(Emp)session.load(Emp.class, 1);

//對資料庫操作才會發sql
   System.out.println(emp.getEmpName());
  }

控制檯:無輸出

 控制檯:Hibernate: 
    select
        emp0_.empId as empId1_1_0_,
        emp0_.empName as empName2_1_0_,
        emp0_.dept as dept3_1_0_ 
    from
        test_Emps emp0_ 
    where
        emp0_.empId=?
小王


get方法直接會對資料庫查詢並輸出sql語句不管有沒有輸出直接查詢



public void testGet(){

Emp emp=(Emp)session.get(Emp.class, 1);
 
   
  }


控制檯:


Hibernate: 
    select
        emp0_.empId as empId1_1_0_,
        emp0_.empName as empName2_1_0_,
        emp0_.dept as dept3_1_0_ 
    from
        test_Emps emp0_ 
    where
        emp0_.empId=?