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

          EJB學習日記(18)

          Posted on 2007-10-12 10:48 semovy 閱讀(265) 評論(0)  編輯  收藏 所屬分類: EJB
          繼承映射策略之----每個具體類一張表

          昨天我們看了繼承關系中的實現,昨天是用一張表保存所有級別的類,今天我們來了解一下第二種實現方法,每一個類一個單獨的表的實現,在數據庫我們的例子表現如下:

          create table Person (
             id 
          integer primary key not null,
             firstName 
          varchar(255),
             lastName 
          varchar(255),
          );

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

          create table Employee (
             id 
          integer primary key not null,
             firstName 
          varchar(255),
             lastName 
          varchar(255),
             street 
          varchar(255),
             city 
          varchar(255),
             state 
          varchar(255),
             zip 
          varchar(255),
             employeeId 
          integer,
          );

          此種方式和SINGLE_TABLE的最大的不同就是這些表里面沒有了辨別器這一列了,我們不再需要為每一個特定的類設定一個標志以識別它是哪個具體的類了。在這種方式的實現里,每一張表都保存了該類的所有的屬性,當然也包括它從父類中繼承過來的屬性。我們看看代碼吧:

          @Entity
          @Inheritance(strategy
          =InheritanceType 
          .TABLE_PER_CLASS)
           

          public class Person {

          }

          @Entity
          public class Customer extends Person {

          }

          @Entity
          public class Employee extends Customer {

          }

          從以上代碼可以看出,唯一需要的元數據注釋只有InheritanceType,并且這個注釋僅僅是用在基類Person上面而已,在他的子類中,根本看不出來有什么不一樣,它們就像一個很普通的實體BEAN一樣。

          優點:
          相比于SINGLE_TABLE的映射策略來說,此策略的優點是你可以在每一個子類上定義一些屬性的約束,比方說某些屬性不能為null等等,這些都是可以定義的,但是你在SINGLE_TABLE里面卻是不能定義的,它還有一個優點就是,它對于處理那些遺留的數據庫來說更加的容易一些,因為它更靈活一些。
          缺點:
          此策略依然是不規范的,沒有做到物盡其用,因為它為每一個子類都重復定義了很多列,這勢必給數據庫的資源造成了浪費,當需要進行多態加載的時候,就會進行多次查詢,這樣也會降低數據庫的查詢效率,這樣比較起來就沒有SINGLE_TABLE 策略速度快,但是它在別的方面性能會好一些,在開發你的實體BEAN的時候,最好不要用這種策略,除非你不得不這樣做,否則還是用第三種策略來得更好一些,那第三種策略是怎樣實現的呢,我們下次再講。

          主站蜘蛛池模板: 集贤县| 望奎县| 昌图县| 松原市| 花垣县| 应城市| 修武县| 南安市| 富阳市| 定州市| 库尔勒市| 青海省| 通州区| 璧山县| 呼伦贝尔市| 库伦旗| 渝北区| 吉林省| 京山县| 都兰县| 孟连| 伊春市| 徐州市| 凤凰县| 鹤峰县| 无极县| 鸡泽县| 怀安县| 双鸭山市| 营山县| 滨州市| 余江县| 广东省| 兴宁市| 寿光市| 平顺县| 彰化县| 同心县| 高唐县| 凉城县| 电白县|