2012-02-01 268 views
0

我有,爲簡單起見,看起來像一個傳統的數據庫表:的Hibernate映射枚舉

table address{ 
    varchar line1 
    varchar line2 
    varchar line3 
    varchar(1) deliveryline 
    } 

有上deliveryline檢查約束確保它的值'1,'2', or '3'

這似乎是一個很好的候選人在休眠枚舉。我有一個看起來像這樣表示地址表中的實體:映射枚舉當

public class Address{ 
    String line1; 
    String line2; 
    String line3; 
    DeliveryLine deliveryLine; 
    } 

我通常使用@Enumerated(EnumType.STRING),但這個策略並不在這裏工作。例如:

公共枚舉DeliveryLine { 1,2,3 } 這不會編譯,因爲在數據庫中(1,2,3)的有效值是無效的Java標識符。

有沒有一種直接的方式來強制這種映射在休眠?

+0

什麼是數據庫你在用嗎?你能改變數據庫中'deliveryline'的數據類型嗎? – tscho 2012-02-01 18:37:23

+0

Oracle 10g/11g,不幸的是我堅持使用給定的模式。 – BuffaloBuffalo 2012-02-01 20:44:59

回答

4

GenericEnumUserTypehibernate.org描述(在「靈活的解決方案」)

如果您在使用Hibernate 4,你將不得不使用修改後的版本所討論here

+0

我將在不久的將來轉向Hibernate4,看起來我會在第二個鏈接上使用您的答案,以使其正確工作。與此同時,我將'delivery_line'列映射到一個String屬性,並將getter/setter屬性鏈接到我想要的枚舉屬性。不完全是最乾淨的解決方案,但它在過渡期中起作用。 – BuffaloBuffalo 2012-02-10 17:24:40