<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
    主站蜘蛛池模板: 在线视频精品免费| 日韩电影免费在线观看| 亚洲成在人线aⅴ免费毛片| 久久精品国产亚洲av麻豆色欲| 成人国产精品免费视频| 亚洲情a成黄在线观看| 精品亚洲福利一区二区| 国产免费人人看大香伊| 狠狠综合亚洲综合亚洲色| 国产又大又黑又粗免费视频| 亚洲国产精品精华液| 免费特级黄毛片在线成人观看| 亚洲色偷偷综合亚洲av78| 天天摸天天碰成人免费视频| 亚洲人成色777777精品| 无码国模国产在线观看免费| 青娱乐在线免费观看视频| 亚洲AⅤ优女AV综合久久久| 一级做a爱片特黄在线观看免费看 一级做a爱过程免费视 | 久久狠狠躁免费观看| 亚洲成在人天堂在线| 国产精品免费网站| 亚洲熟妇AV一区二区三区宅男| 韩国18福利视频免费观看| 美女扒开尿口给男人爽免费视频| 亚洲国产成人VA在线观看| 成在人线av无码免费高潮水| 亚洲另类激情综合偷自拍| 永久在线观看www免费视频| 亚洲国产无线乱码在线观看 | 免费精品国产自产拍在线观看图片| 亚洲videos| 亚洲AⅤ无码一区二区三区在线| 三年片免费高清版| 亚洲国产成人久久99精品| 国产精品四虎在线观看免费| 成人免费av一区二区三区| 亚洲喷奶水中文字幕电影 | 免费精品久久天干天干| 亚洲啪啪免费视频| 免费一级毛片在级播放|