Hibernate映射關系其實有很多種黍衙,包含一對一,一對多荠诬,多對一琅翻,多對多。其中柑贞,還有包含單向關聯(lián)望迎,多想關聯(lián)。但是鑒于時空關系凌外,本文只談一下單向一對多關系的映射。而多對一進行反向思維就是一對多涛浙。
如何確定一個映射關系:
這個取決于需求康辑,比如,你的師生管理項目中轿亮,客戶已經明確規(guī)定疮薇,在這個項目中,老師可以教多個學生我注,學生也可以有多個老師按咒,這很明顯是m:n就是多對多的關系。如果說做部門與員工這樣的表但骨,那么一個部門可以有多個員工励七,但是智袭,每個員工只能在一個部門工作,這就是一個1:M一對多的關系掠抬。到底要用哪種關系吼野,取決于你對客戶需求的理解 。
正文
這里我所寫的是一個班級對應著多個學生两波。
一對多的映射關系:
類的設定:在多對一的關系中瞳步,多的哪一方屬于歸屬方,而少的那一方屬于被歸屬方腰奋。(歸屬方歸屬于被歸屬方)在設定類中的內容的時候单起,一的那一方除了有自己特有的屬性意外,還應該將多的那一方的Set集合寫進一的那一方的類中劣坊。而多的那一方嘀倒,應該將一的那一方的對象寫在自己的類的屬性中,表示自己歸屬于這個類讼稚。
如:
Classes.java
package com.zhiyou.hibernate.entity;
import java.util.HashSet;
import java.util.Set;
public class Classes {
/* 這里我只寫了屬性括儒,并沒有寫set和get方法。IDE工具可以自動生成*/
private int id;
private String name;
// 一對多通常使用Set來映射锐想,Set是不可重復內容帮寻。
private Set<Student> students = new HashSet<Student>();
}
Student.java
/* 這里我只寫了屬性,并沒有寫set和get方法赠摇。IDE工具可以自動生成*/
private int id;
private String name;
private Classes classes;
處理完class類固逗,就需要配置與Class類對應的hub的xml文件。
在Hibernate中所有的實體類都對應著一個hub配置文件藕帜。
而hub配置文件同時又關聯(lián)著數據庫表烫罩。
classes.hub.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.zhiyou.hibernate.entity">
<class name="Classes" table="t_classess">
<id name="id" column="id">
<!-- 這個表示主鍵的生成方式
http://blog.csdn.net/zxygww/article/details/45194445
-->
<generator class="native"/>
</id>
<property name="name" column="name"></property>
<!-- 設置Set集合屬性,用于關聯(lián)多個學生 -->
<set name="students" >
<!-- 在t_student表中創(chuàng)建外鍵classid,與本表的id對應 -->
<key column="classesid" />
<!--
<one-to-many>
<many-to-one>
的選擇取決于當前類與指向類的關系洽故,如果當前為一對多中的一贝攒,那么應當選擇<one-to-many>
如果當前是一對多種的多那么當選擇<many-to-one>,當然如果是單向關聯(lián)时甚,那么就無需寫此標簽
http://blog.csdn.net/xiaoxian8023/article/details/15339657
-->
<one-to-many class="Student"/>
</set>
</class>
</hibernate-mapping>
student.hub.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.zhiyou.hibernate.entity.Student" table="t_student">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="name" column="name"/>
</class>
</hibernate-mapping>
備注:
對classes.hub.xml的補充說明