<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
    主站蜘蛛池模板: 免费精品国产自产拍观看| 歪歪漫画在线观看官网免费阅读 | 亚洲伊人久久大香线蕉综合图片| 亚洲精品9999久久久久无码| 成在人线AV无码免费| 亚洲日本久久久午夜精品| 免费人成视频在线| 亚洲色欲色欲www在线播放 | 成人无码区免费A∨直播| 亚洲日韩在线第一页| 国产一级一毛免费黄片| 亚洲AV无码一区二区乱孑伦AS| 午夜精品一区二区三区免费视频| 亚洲2022国产成人精品无码区| 日韩电影免费在线观看| 亚洲丝袜中文字幕| 成人啪精品视频免费网站| 国产精品无码亚洲精品2021| 亚洲色偷拍区另类无码专区| 成年女人A毛片免费视频| 亚洲视频在线视频| 成年女人18级毛片毛片免费 | 无码一区二区三区AV免费| 亚洲最大中文字幕无码网站| 免费日韩在线视频| 两性色午夜免费视频| 亚洲色图综合网站| 午夜免费福利网站| 国产日韩AV免费无码一区二区| 亚洲美女aⅴ久久久91| 日本午夜免费福利视频| 国产又黄又爽胸又大免费视频 | 国产一级特黄高清免费大片| 中文字幕免费观看视频| 亚洲国产精品线观看不卡 | 夜夜春亚洲嫩草影院| 日韩在线免费视频| 菠萝菠萝蜜在线免费视频| 亚洲av日韩av无码黑人| 大学生美女毛片免费视频| 国产一级a毛一级a看免费视频|