<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Sealyu

    --- 博客已遷移至: http://www.sealyu.com/blog

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      618 隨筆 :: 87 文章 :: 225 評論 :: 0 Trackbacks

    實體Entity中通過@Enumerated標注枚舉類型,例如將CustomerEO實體中增加一個CustomerType類型的枚舉型屬性,標注實體后的代碼如下所示。

    @Entity

    @Table(name = "customer")

    public class CustomerEO implements java.io.Serializable {

    ……

             private CustomerType type;

     

             @Enumerated(EnumType.STRING)

             public CustomerType getType() {

                       return type;

             }

     

             public void setType(CustomerType type) {

                       this.type = type;

             }

     

             public enum CustomerType {

                       COMPETITOR, INVESTOR, PARTNER, VENDER

             }

     

    }

    在實體中雖然標注成枚舉類型,但當實體持久化后,表中所對應的值仍舊是基本的數據類型,以上代碼創建表的SQL語句是:

    CREATE TABLE customer (

             id int(20) NOT NULL auto_increment,

             name varchar(255),

             type varchar(255),

             PRIMARY KEY (id)

    )

    使用枚舉類型后,在創建實體時便可以直接引用枚舉類型,例如以下代碼所示。

    CustomerEO customer = new CustomerEO();

    customer.setName("Janet2");

    customer.setType(CustomerType.PARTNER);

    entityManager.persist(customer);

    在使用@Enumerated注釋時,需要注意以下幾個問題:

    l         因為枚舉類型的有名稱和值兩個屬性,所以在持久化時可以選擇持久化名稱或是持久化值。通過EnumType來定義,它有兩個值如下所示。

    public enum EnumType {

    ORDINAL,

    STRING

    }

    ORDINAL表示持久化的為枚舉類型的值,STRING表示持久化的為枚舉類型的名稱。默認為ORDINAL,持久化值。例如以上示例中標注的為STRING,這樣持久化實體后,數據庫中保存的是枚舉類型的名稱,如圖所示。

    若此時改成ORDINAL,代碼如下:

             @Enumerated(EnumType.ORDINAL)

             public CustomerType getType() {

                       return type;

             }

    則同樣持久化的實體后,數據庫保存的結果如圖所示。

    l         如何選擇STRINGORDINAL

    如果使用STRING保存,雖然從數據庫中查詢數據時非常直觀,能夠清楚的看出該類型代表意義,但這樣也會帶來其他的問題。若此時枚舉類型的定義改變,例如上例中的枚舉類型名稱改為:

             public enum CustomerType {

                       CUST_COMPETITOR, INVESTOR, PARTNER, VENDER

             }

    則此時數據庫中保存的“COMPETITOR”的值將不能轉化為枚舉類型CustomerType中的“CUST_COMPETITOR”的值。但若使用ORDINAL則不會帶來這種問題。所以建議使用ORDINAL類型來持久化枚舉類型。

    l         枚舉類型的定義位置,實體外部VS實體內部。

    上例中CustomerType枚舉類型定義在CustomerEO實體內部,這是因為只有CustomerEO這個實體會使用CustomerType類型,其他的實體不會使用該類型。該類型與這個實體關系緊密聯系。

    但若此時多個實體公用一個枚舉類型時,則可以將枚舉類型單獨定義,定義在實體的外部。有這樣一個枚舉類型BusinessLine,它定義在實體外部,代碼如下:

    public enum BusinessLine {

             REAL_ESTATE,FINANCE, NON_PROFIT

    }

    例如CustomerEO實體增加一個BusinessLine的枚舉類型,代碼如下所示。

    @Entity

    @Table(name = "customer")

    public class CustomerEO implements java.io.Serializable {

    ……

             private BusinessLine businessLine;

     

             @Enumerated(EnumType.STRING)

             public BusinessLine getBusinessLine() {

                       return businessLine;

             }

     

             public void setBusinessLine(BusinessLine businessLine) {

                       this.businessLine = businessLine;

             }

    }

    posted on 2009-06-30 13:18 seal 閱讀(3797) 評論(0)  編輯  收藏 所屬分類: Hibernate數據庫EJB
    主站蜘蛛池模板: 久久精品无码精品免费专区| 亚洲砖码砖专无区2023 | 免费人成在线观看网站视频| 亚洲欧洲春色校园另类小说| 亚洲日韩在线观看| 色爽黄1000部免费软件下载| 亚洲精品无码专区久久同性男| 视频一区二区三区免费观看| 四虎永久在线免费观看| 色偷偷噜噜噜亚洲男人| 男人的天堂亚洲一区二区三区| 亚洲日本VA午夜在线影院| 成人免费a级毛片| 欧美亚洲国产SUV| 亚洲成A人片在线观看中文| 一级特黄aaa大片免费看| 91麻豆国产自产在线观看亚洲| 精品一卡2卡三卡4卡免费视频 | 久久亚洲国产伦理| 中国人xxxxx69免费视频| 亚洲色偷偷综合亚洲av78| 亚洲av无码专区在线观看素人| 成人无码精品1区2区3区免费看| 亚洲精品少妇30p| 免费v片在线观看视频网站| 亚洲偷偷自拍高清| 成人亚洲综合天堂| 国产真人无码作爱视频免费| 亚洲视频中文字幕在线| 在线观看免费宅男视频| 五月天婷婷免费视频| 亚洲视频在线视频| 日本免费一本天堂在线| 久久性生大片免费观看性| 亚洲最大的视频网站| 四虎永久在线免费观看| 久久精品视频免费播放| 爱爱帝国亚洲一区二区三区| 亚洲AV午夜福利精品一区二区| 毛片免费观看网址| 国产成人免费AV在线播放|