1. 建立域模型和關系數(shù)據(jù)模型有著不同的出發(fā)點:域模型是由程序代碼組成的,通過細化持久化類的粒度來提高代碼可重用性,簡化編程;而關系數(shù)據(jù)模型是由關系數(shù)據(jù)組成的,在存在數(shù)據(jù)冗余的情況下,可以把粗粒度的表拆分成具有外鍵參照關系的幾個細粒度表,此外在沒有數(shù)據(jù)冗余的情況下應該盡可能減少表的數(shù)目,簡化表之間的參照關系。
域模型中的聚集aggregation對象關系在關系數(shù)據(jù)模型中可以通過映射為組成關系來提高代碼和數(shù)據(jù)庫訪問質量。比如說一個customer具有homeAddress和comAddress屬性,從域模型出發(fā),應該把homeAddress和comAddress抽取出來成為一個過程對象。而在關系數(shù)據(jù)模型中可以通過hibernate提供的組成關系進行映射。映射文件如下:
而有一點要格外注意的是,域模型的組成對象homeAddress和comAddress對象除了具有一般的屬性成員變量外,需要為hibernate提供一個parent屬性,如下所示
hibernate提供的這種組成關系映射允許嵌套使用
2. 區(qū)分值value類型和實體Entity類型
Hibernate把持久化類的屬性分為value和Entity類型。前者沒有OID,不能被單獨持久化,不能單獨通過session加載,它的生命周期依賴于所屬的持久化類的對象生命周期,組件類型就是一種類型;而后者有OID,可以被單獨持久化。在通過Configuration類的addClass()方法加載映射文件時,只需要加載與value類型對應的實體類型,而不需要單獨加載組件類。當通過hibernate進行數(shù)據(jù)庫操作的時候,hibernate會自動把組件類的屬性轉換為實體類的屬性,從而和table的列對應起來
域模型中的聚集aggregation對象關系在關系數(shù)據(jù)模型中可以通過映射為組成關系來提高代碼和數(shù)據(jù)庫訪問質量。比如說一個customer具有homeAddress和comAddress屬性,從域模型出發(fā),應該把homeAddress和comAddress抽取出來成為一個過程對象。而在關系數(shù)據(jù)模型中可以通過hibernate提供的組成關系進行映射。映射文件如下:
1
<component name="homeAddress" class="com.homeAddress">
2
<parent name="customer"/>
3
<property name="street" type="String" column="HOME_STREET"/>
4
<property name="city" type="String" column="HOME_CITY"/>
5

6
</component>
這樣進行映射后,并不需要為homeAddress和comAddress單獨設置數(shù)據(jù)庫表,應該把homeAddress和comAddress的屬性都和customer表放在一起
2

3

4

5


6

而有一點要格外注意的是,域模型的組成對象homeAddress和comAddress對象除了具有一般的屬性成員變量外,需要為hibernate提供一個parent屬性,如下所示
1
packge com;
2
3
import java.io.Serializabel;
4
5
public class HomeAddress implements Serializable{
6
private String street;
7
private String city;
8

9
private com.Customer customer;
10

11
public void setCustomer(Customer customer){
}
12
public Customer getCustomer(){
}

2

3

4

5

6

7

8


9

10


11


12


hibernate提供的這種組成關系映射允許嵌套使用
1
<component>
2
<compoent>
3

4
</componet>
5

6
</component>

2

3


4

5


6

2. 區(qū)分值value類型和實體Entity類型
Hibernate把持久化類的屬性分為value和Entity類型。前者沒有OID,不能被單獨持久化,不能單獨通過session加載,它的生命周期依賴于所屬的持久化類的對象生命周期,組件類型就是一種類型;而后者有OID,可以被單獨持久化。在通過Configuration類的addClass()方法加載映射文件時,只需要加載與value類型對應的實體類型,而不需要單獨加載組件類。當通過hibernate進行數(shù)據(jù)庫操作的時候,hibernate會自動把組件類的屬性轉換為實體類的屬性,從而和table的列對應起來