千里冰封
          JAVA 濃香四溢
          posts - 151,comments - 2801,trackbacks - 0
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          盡管千里冰封
          依然擁有晴空

           

          留言簿(204)

          隨筆分類(197)

          隨筆檔案(189)

          文章檔案(2)

          友情鏈接

          搜索

          •  

          積分與排名

          • 積分 - 964744
          • 排名 - 35

          最新隨筆

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          非實(shí)體的基類映射

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

           

          @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 {

          }

           

          因?yàn)镻erson已經(jīng)不是一個(gè)實(shí)體類了,所以在數(shù)據(jù)庫(kù)里面將沒有它所對(duì)應(yīng)的表,所有的子類都繼承了定義在它里面的屬性,當(dāng)然,如果你想在子類里面重新定義在父類里面定義過的屬性的時(shí)候,你可以用@javax.persistence.AttributeOverride來(lái)聲明,當(dāng)我們的代碼運(yùn)行以后,將會(huì)在數(shù)據(jù)庫(kù)里面建立如下的結(jié)構(gòu):

           

          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這些屬性,因?yàn)橛昧?span style="color: #0000ff">@AttributeOverride來(lái)指定重寫的屬性,所以在數(shù)據(jù)庫(kù)里面lastName對(duì)應(yīng)的列就變成了SURNAME.像這種映射方法在你不想強(qiáng)制你的超類持久化的時(shí)候特別有用。

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

          個(gè)人還是覺得要映射的時(shí)候,寫清楚更好一些,不要用太多的默認(rèn)了,因?yàn)槟J(rèn)用多了都不知道是怎么回事了,還有,當(dāng)一些事情不太確定的時(shí)候,不防去試一下,反應(yīng)試一下也無(wú)所謂,自己親自去試了才能印象更深,希望大家在學(xué)EJB的時(shí)候,多多動(dòng)手去寫寫。我也得努力了:)




          盡管千里冰封
          依然擁有晴空

          你我共同品味JAVA的濃香.
          posted on 2007-10-11 00:23 千里冰封 閱讀(1168) 評(píng)論(0)  編輯  收藏 所屬分類: JAVAEE
          主站蜘蛛池模板: 自贡市| 通许县| 瑞金市| 万全县| 雷州市| 岳阳市| 出国| 大丰市| 靖远县| 准格尔旗| 斗六市| 尚志市| 奉化市| 上高县| 宁阳县| 汤阴县| 剑阁县| 榕江县| 揭东县| 三台县| 永泰县| 二连浩特市| 内黄县| 汶上县| 景宁| 镇康县| 尉氏县| 武强县| 师宗县| 湖南省| 廊坊市| 兴文县| 河东区| 京山县| 抚顺县| 三明市| 临沭县| 嘉黎县| 长白| 商南县| 霍山县|