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

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

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

    posts - 0, comments - 77, trackbacks - 0, articles - 356
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    EJB學習日記(20)

    Posted on 2007-10-12 11:06 semovy 閱讀(298) 評論(0)  編輯  收藏 所屬分類: EJB

    非實體的基類映射

    最近我們都說了很多繼承方面的映射策略,可是有時候我們卻需要繼承一個非實體的類,這個類存在于我們的工程項目中,但是我們又不希望它成為一個實體類,這個時候怎么辦呢?這個時候我們可以用@javax.persistence.MappedSuperclass來注釋它,我們現在就修改一下我們前幾天的例子,把Person類定義成一個不持久化的類。代碼如下:

     

    @MappedSuperclass
    public class Person {
       @Id @GeneratedValue
       
    public int getId( ) { return id; }
       
    public void setId(int id) { this.id = is; }

       
    public String getFirstName( ) { return firstName; }
       
    public void setFirstName(String first) { this.firstName = first; }

       
    public String getLastName( ) { return lastName; }
       
    public void setLastName(String last) { this.lastName = last; }
    }

    @Entity
    @Table(name
    ="CUSTOMER")
    @Inheritance(strategy
    =InheritanceType.JOINED)
    @AttributeOverride(name
    ="lastname", column=@Column(name="SURNAME"))
    public class Customer extends Person {

    }

    @Entity
    @Table(name
    ="EMPLOYEE")
    @PrimaryKeyJoinColumn(name
    ="EMP_PK")
    public class Employee extends Customer {

    }

     

    因為Person已經不是一個實體類了,所以在數據庫里面將沒有它所對應的表,所有的子類都繼承了定義在它里面的屬性,當然,如果你想在子類里面重新定義在父類里面定義過的屬性的時候,你可以用@javax.persistence.AttributeOverride來聲明,當我們的代碼運行以后,將會在數據庫里面建立如下的結構:

     

    create table CUSTOMER (
       id 
    integer primary key not null,
       firstName 
     
    varchar(255),
       SURNAME 
     
    varchar(255),
       street 
    varchar(255),
       city 
    varchar(255),
       state 
    varchar(255),
       zip 
    varchar(255),
    );

    create table EMPLOYEE (
       EMP_PK 
    integer primary key not null,
       employeeId 
    integer
    );

     


    就像你看到的,Customer類繼承了Person里面的id,firstName ,lastName這些屬性,因為用了@AttributeOverride來指定重寫的屬性,所以在數據庫里面lastName對應的列就變成了SURNAME.像這種映射方法在你不想強制你的超類持久化的時候特別有用。

    @MappedSuperclass不僅可以注釋在基類上面,你也可以注釋在兩個層次的實體類中間,當然,你也可以不加任何注釋,不過,當你什么注釋都不加的時候,持久化管理器就會完全忽略你的這個類了。

    個人還是覺得要映射的時候,寫清楚更好一些,不要用太多的默認了,因為默認用多了都不知道是怎么回事了,還有,當一些事情不太確定的時候,不防去試一下,反應試一下也無所謂,自己親自去試了才能印象更深,希望大家在學EJB的時候,多多動手去寫寫。我也得努力了:)

    主站蜘蛛池模板: 亚洲色大成网站www永久男同| 亚洲黄色片在线观看| 亚洲熟妇丰满xxxxx| A级毛片内射免费视频| 亚洲一区二区三区在线观看蜜桃 | 久草免费福利在线| 亚洲色图校园春色| 777成影片免费观看| 亚洲国产成人久久77| 黄页网站在线看免费| 又黄又爽一线毛片免费观看| 鲁死你资源站亚洲av| 免费在线观看理论片| 一级中文字幕免费乱码专区| 亚洲国产精品国产自在在线 | 亚洲一区精品伊人久久伊人| 亚洲男人电影天堂| 成年人性生活免费视频| 亚洲AV午夜福利精品一区二区| 日韩免费电影网址| 香蕉大伊亚洲人在线观看| 免费萌白酱国产一区二区三区 | 亚洲va在线va天堂va手机| 成人看的午夜免费毛片| 污视频网站免费在线观看| 亚洲狠狠婷婷综合久久久久 | 99热免费在线观看| 亚洲国产成人影院播放| 伊人免费在线观看高清版| 亚洲精品网站在线观看你懂的| 天天天欲色欲色WWW免费| 亚洲美女视频一区二区三区| 精品无码国产污污污免费| 亚欧洲精品在线视频免费观看| 国产男女猛烈无遮挡免费视频网站| 久久99亚洲网美利坚合众国| 最新猫咪www免费人成| caoporn国产精品免费| 亚洲乱码中文论理电影| 亚洲色一色噜一噜噜噜| 国产无人区码卡二卡三卡免费 |