2010-04-15 85 views
2

在一個簡單的繼承樹,一個抽象的超類有兩個子類。我可以在Hibernate每個層次繼承策略中的子類間重複使用一列嗎?

子類都存儲一個鍵 - 值對,但只有一個會拿着類型加密的字符串,而另一個普通老式字符串。現在

,我的問題是我能做到這一點:

@Entity 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
public abstract Attribute { 
    @Id 
    private Integer id; 

    @Column(name="attribute_key") 
    private String key; 
} 

@Entity 
public EncryptedAttribute extends Attribute { 
    @Column(name="attribute_value") 
    private EncryptedString encryptedValue; 
} 

@Entity 
public UnEncryptedAttribute extends Attribute { 
    @Column(name="attribute_value") 
    private String plainValue;   
} 

加密的字符串和普通字符串都應該結束瞭如同db VARCHAR處理,但我可以存儲與不同的子類中相關的持久化屬性同一列?這將避免在特定行中未使用的列中存儲空值的「瑞士奶酪」副作用。

回答

5

當然可以。 (我會這樣做你的情況)

但是,你會遇到一些限制: 兩個屬性將具有相同的最大長度。

凡分享一列這樣的子類別間更可疑的是外鍵。假設你想在兩個外鍵(一個在每個子類)來引用不同的表,你將不能夠,如果你使用相同的列設置一個外鍵約束。

在另一方面,如果兩個外鍵是強制性的,但您選擇使用兩個不同的列,這樣就可以有FK的約束,你將不能夠設置一個非空約束。

相關問題