<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
    主站蜘蛛池模板: 在线综合亚洲欧洲综合网站| 两个人看www免费视频| 最新欧洲大片免费在线| 亚洲黄色在线播放| 无码成A毛片免费| 青青草国产免费久久久91| 国产91在线|亚洲| 久草免费福利资源站| 凹凸精品视频分类国产品免费| 久久久亚洲精品国产| 99re免费视频| 亚洲91精品麻豆国产系列在线| 免费电视剧在线观看| 亚洲日产乱码一二三区别| 久久久久久AV无码免费网站| 久久精品国产亚洲AV无码偷窥| 日本最新免费网站| 亚洲精品成a人在线观看☆| 久久www免费人成看片| 亚洲一级毛片中文字幕| 日韩精品免费电影| 成全在线观看免费观看大全| 亚洲第一网站免费视频| 日本免费福利视频| 美女无遮挡拍拍拍免费视频| 久久亚洲AV成人无码软件| 岛国大片免费在线观看| 一级毛片**免费看试看20分钟| 日韩免费视频网站| 春意影院午夜爽爽爽免费| 亚洲福利在线视频| 日韩a级毛片免费视频| 成人免费一区二区三区| 亚洲免费二区三区| 日韩精品成人无码专区免费| 立即播放免费毛片一级| 亚洲国产一区在线| 国产免费怕怕免费视频观看| 国产一区二区免费| 亚洲综合国产精品| 全部免费国产潢色一级|