客戶用 hibernate 實做中提出一個關於繼承與複合鍵的問題,題目是這樣的:
1. 父類別是抽象類別,父類別已定義 主鍵 = 序號
2. 有兩個子類別繼承
3. 子類別的 主鍵 = 子類別型態 + 父類別序號
要怎樣用 hibernate 的 ORM 實現這種設計?
以下是我的答覆:首先須了解 ENTITY_TYPE 代表類別型態這件事的定義,我猜測 ParentEntity, Child1Entity, Child2Entity 裡頭有有對應的 entityType 屬性,如果答案是肯定的,我就不會用 <discriminator column="ENTITY_TYPE" type="string" length="10" /> 這樣的設定去識別子類別,我會用以下的 ORM 方式去設計
<discriminator column="CLASS_TYPE" type="string" length="10" />
<property name="entityType" column="ENTITY_TYPE" />
<subclass name="Child1Entity" discriminator-value="Child1">
...
</subclass>
<subclass name="Child1Entity" discriminator-value="Child2">
...
</subclass>
如果ParentEntity, Child1Entity, Child2Entity 裡頭沒有對應的 entityType 屬性,那麼複合鑑的問題又要怎樣處理? 這部分有幾種選項
1. 採用 hibernate 提供的 composite-id 設定方式
2. 由物件負責處理,以 ParentEntity 為例
class ParentEntity {
String serial;
String entityType;
public String getSerial() {
return serial;
}
public String getEntityType() {
return tokenType;
}
public String getEntityId() {
return getEntityType()+getSerial();
}
protected void setEntityId(String eid) {
// do nothing
}
}
其 ORM 可以宣告如下
<id name="entityId" column="ENTITY_ID" length="128"/>
3. 另外寫一個 EntityID 產生程式
不知道各位是否有其他見解? 歡迎加入討論
2008年11月12日 星期三
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言