我爲此選擇的解決方案是使用整數鑑別器對每類類層次結構進行映射。
我創建了存儲對象
public abstract class ValueBase<T> {
private Long id;
private int valueType;
private T value;
public T getValue(){
return value;
}
public void setValue(T value){
this.value = value;
}
protected void setValueType(int valueType) {
this.valueType = valueType;
}
public int getValueType(){
return this.valueType;
}
private void setID(Long id) {
this.id = id;
}
public int getID(){
return this.id;
}
}
對於類型管理我已創建和接口抽象基泛型類,但有可能使用由亞瑟提出的封裝來枚舉。
public interface IValueTypes() {
public static final int NONE = -1;
public static final int NUMERIC = 0;
public static final int CHARACTER = 1;
public static final int DATE = 2;
public static final int TIME = 3;
public static final int BOOLEAN = 4;
}
的每種類型的我已經創建的類
public class NumericType extedns ValueBase<BigDecinal> {
public NumericType(){
super();
setValueType(IValueTypes.NUMERIC);
}
}
public class CharacterType extedns ValueBase<String> {
public NumericType(){
super();
setValueType(IValueTypes.CHARACTER);
}
}
提示:要允許使用一個數字作爲鑑別價值,我們需要先指定它爲我們測繪類,因爲默認情況下是使用類名[字符串],我們嘗試使用數字鑑別器進行子類映射,我們將得到一個休眠錯誤,說有一些類型不匹配。
<class name="TestValue" table="TestValues" schema="TEST" abstract="true" discriminator-value="-1">
<id name="id" type="java.lang.Long">
<column name="VALUE_ID" precision="22" scale="0" />
<generator class="native"/>
</id>
<discriminator column="TYPE_VALUE" not-null="false" type="integer"/>
<subclass discriminator-value="0" name="NumericType">
<property name="value" type="java.math.BigDecimal" column="NUMERIC" not-null="false"/>
</subclass>
<subclass discriminator-value="1" name="CharacterType">
<property name="value" type="java.lang.String" column="CHARACTER" not-null="false"/>
</subclass>
</class>
雖然我們從數據庫中檢索的對象總是在我們可以很容易操作給出類型類,我們用一個地方通過保存的基類來拯救他們。
感謝您提供您的解決方案(+1) – 2010-08-16 15:10:47