閱讀915 返回首頁    go 阿裏雲 go 技術社區[雲棲]


第九章 關係映射 集合關聯映射


基本上所有集合關聯映射都是在一對多,多對多操作的時候使用。


1set

我們之前在做一對多操作的時候,多的一方就是一個set.

一對多的例子:https://blog.csdn.net/p_3er/article/details/9036921


實體類中:

private Set<Employee> employees; 



對應的映射文件:

<set name="employees" inverse="false" cascade="all">  
            <key column="department_id"></key>  
            <one-to-many />  
        </set>  


2、有序的List

數據庫的employee表中多了一個e_index字段,用以表示順序。


實體類中:

private List<Employee> employees;


對應的映射文件:

<list name="employees" cascade="save-update">
       		<key column="department_id"></key>
       		<index column="e_index"></index>
       		<one-to-many />
       </list>



增加操作與set一樣

        List集合是有順序的,"index"標簽,是用於記錄順序,List的順序將表現在"e_index"列上,其餘設置,與Set集合類似。注意:List映射中"inverse"中的值不能設置為"true",不然,"e_index "的列值將不會被賦值。



3、無序的List

數據庫的employee表中無e_index字段。無序的ListSet使用起來是一樣的。隻是無序的List使用的映射標簽是<bag>


實體類中:

privateList<Employee> employees;



對應的映射文件:

<bag name="employees" cascade="all">
       		<key column="department_id"></key>
       		<one-to-many />
       </bag>


增加操作與set一樣



4Map

表設計與set的時候一樣。

實體類中:

privateMap<String, Employee> employees;

這裏的鍵值對中的鍵應該是唯一的(不重複),我們設置為員工的名字。



對應的映射文件:

<map name="employees" cascade="all">
        	<key column="department_id"></key>
        	<map-key type="string" column="name"></map-key>
        	<one-to-many />
      </map>


增加操作:

transaction = session.beginTransaction();
			Department department = new Department();
			department.setName("m");
			
			Map<String, Employee> employees = new HashMap<String, Employee>();
			for(int i = 0;i < 10; i++){
				Employee employee = new Employee();
				employee.setName("m"+i);
				employees.put(employee.getName(), employee);
			}
			
			department.setEmployees(employees);
			session.save(department);
			
			transaction.commit();



5、注意

5.1HashMap<String,Employee> employees = newHashMap<String,Employee>();

這樣子的寫法在Java中語法上和使用上是沒有任何問題的。

因為懶加載的需要,我們使用所有集合對象都應該用接口來定義。而且在我們寫程序的過程中也盡可能得使用接口。


5.2cascade缺省為不級聯。

cascade的值有:none,all,save-update,delete...

many-to-one many-to-many一般不設置級聯

one-to-one one-to-many可設置級聯


5.3inverse是否要放棄維護關聯關係

true為放棄,false為不放棄(缺省)

一般不設置放棄





最後更新:2017-04-03 18:52:08

  上一篇:go JsonHelper Json轉xml,Json轉DataSet,DataSet轉Json
  下一篇:go 一道麵試題:求一個滿足要求的數組