2011-01-14 53 views
6

我有一個包含一個枚舉屬性的實體。該屬性可以在我的代碼庫我的類型枚舉中的任何一個:堅持原始的Java枚舉使用Hibernate

public enum AutomobileType { 
    CAR, TRUCK, MOTORCYCLE 
} 

public enum BoatType { 
    ROW_BOAT,YACHT,SHIP 
} 

@Entity 
public class FooBar { 

    @Enumerated(value=EnumType.ORDINAL) 
    private Enum enumValue; 

    public void setEnumValue(Enum value) { ... } 
    public Enum getEnumValue() { ... } 
} 

這失敗的異常,「錯誤的數據類型:對於輸入字符串:‘[B @ f0569a’我改變FooBar的存儲屬性作爲一個整數的作品,但是這不是我需要什麼。我需要實際的枚舉。如何使這項工作,使枚舉可以持續爲INT但後來拉出到正確的枚舉類型有什麼建議?

+0

「關於如何使這項工作,使枚舉可以持續爲INT但任何建議後拉出到正確的枚舉類型?」 - 你的意思是,你想存儲「1」,然後把它換成AutomobileType? – jpkrohling 2011-01-14 14:04:28

回答

3

您需要爲枚舉定義custom UserType

+0

這並不適用於JPA,當然只適用於XML配置的Hibernate。 – skaffman 2011-01-14 13:18:05

+0

我認爲這是多態枚舉的唯一方法,但引用的代碼示例應該相應地修改。 – axtavt 2011-01-14 13:23:27

2

通常,您不應該這樣做。如果兩個(或多個枚舉)可以分配給t o同一個領域,然後合併成一個anum。

如果使用繼承,如:Vehicle有兩個子類 - BoatCar,那麼你可以有一個不同的字段中的每個子類 - 畢竟每個枚舉的是相關的特定類型。所以:

@Column 
private BoatType boatType; 
0

我不認爲這可以很容易與多個枚舉類型試圖共存在同一個屬性。 hibernate如何知道在將字段加載到數據庫之外時應該實例化哪個Enum類?

如果你真的想這樣做,你需要以某種方式編碼枚舉類+值每次堅持該物業的時間(使用自定義用戶類型爲duffymo建議)。

你不能分成兩個根據企業的性質,每枚舉類一個呢?然後,您可以將enumValue(和enumValue2)聲明爲正確的類,並且它可以開箱即用。