Hibernate第二篇之瞭解物件關係對映
阿新 • • 發佈:2018-11-21
今天寫部落格的時候還是想對自己說幾句話,堅持真的是一件很難的事情,你看轉眼幾天過去了,渾渾噩噩的過去了,什麼都沒有幹,突然間就像是斷了線的風箏沒有了方向。我想要自己每個星期都要抽出一點時間來總結這周的學習進度,每天都要有進步,每天都要往自己的git上提交程式碼,每天都要寫個人的日誌來總結今天學了什麼,都要寫部落格來記錄自己的學習經歷!@自己
一、物件關係對映
物件間主要分為兩種:單向、雙向
對映分為四種:1-1 1-n n-1 n-n
由此分析物件關係對映7種:
單向1-1
單向1-n(需熟練掌握的)
單向n-1(最常用的)
單向n-n
雙向1-1
雙向1-n
雙向n-n(理解,可以用兩個單向n-1來實現)
這裡只記錄最常用的兩個
單向n-1
Person-Address(多人住一個地址)
Person的實體裡有Address屬性
public class Person {
private Integer id;
private String name;
private Address address;
}
public class Addressss{ private Integer id; private String name; }
Person配置(Person.hbm.xml):
Address的配置不變<hibernate-mapping package="one_n_1"> <class name="Person" table="t_Person"> <id name="id"> <generator class="increment"/> </id> <property name="name"/> <!-- 單向n-1 name,屬性名 class,關聯類 column,外來鍵列明 --> <many-to-one name="address" class="Address" column="address_id"></many-to-one>//重點 </class> </hibernate-mapping>
<hibernate-mapping package="one_n_1">
<class name="Address" table="t_Address">
<id name="id">
<generator class="increment"/>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
單向1-1
實體跟上面單向n-1一樣
唯一改變的地方是Person配置(Person.hbm.xml):
<many-to-one unique="true" name="address" class="Address" column="address_id"></many-to-one>
單項1-n
Person-Address(一個人住多個地址)
public class Person {
private Integer id;
private String name;
private Set<Address> addresses=new HashSet<Address>();
}
public class Address{
private Integer id;
private String name;
}
Person配置(Person.hbm.xml)
<hibernate-mapping package="one_1_n">
<class name="Person" table="t_Person">
<id name="id">
<generator class="increment"/>
</id>
<property name="name"/>
<!-- 單向1-n -->
<set name="addresses">
<!-- 指定關聯列的外來鍵 -->
<key column="person_id"/>
<!-- 關聯的具體類 -->
<one-to-many class="Address"/>
</set>
</class>
</hibernate-mapping>
單向n-n
這裡需要中間表來連線,跟單項1-n的變化是
Person配置(Person.hbm.xml):
<hibernate-mapping package="one_n_n">
<class name="Person" table="t_Person">
<id name="id">
<generator class="increment"/>
</id>
<property name="name"/>
<!-- 單向n-n
多對多,需要中間表來維繫關係
-->
<set name="addresses" table="t_person_address">
<!-- 指定當前類在中間表中關聯列的外來鍵 -->
<key column="person_id"/>
<!-- 關聯的具體類
column,關聯類在中間表中關聯列的外來鍵
-->
<many-to-many class="Address" column="address_id"/>
</set>
</class>
</hibernate-mapping>
表關係如圖所示
因為很多配置都是重複的所以只列舉了改變的配置。
先寫單向的吧,雙向有時間在更。