在ejb3.0 裡的實體bean繼承體系有三種繼承對映策略,分別是:
1,inheritancetype.single_table, 即整個繼承體系只對映為一張資料表,這個繼承體系的所有類的屬性都對映到將
對映到這張表的某個字段。除了所有類屬性對映的字段外,為了在這乙個張表中區分各個不同的子類資料,因此額外
增加了乙個類似於型別碼的字段用來區分不同的類,不過該字段不一定實際存在於資料表中。如果不特別指定自己的
型別碼字段,ejb3.0 會自動生成乙個虛擬的型別碼字段(名字為"dtype",型別為string),同樣型別碼的值也可以
自己為每個類指定,也可以自動生成,自動生產時值為類名。joined型別也有 dtype 這個特性
2,inheritancetype.joined, 每個類對映為一張單獨的表,但每一張表中只映**每個類特有的屬性。乙個子類物件
的資料由子類對映表裡的資料和給類父類對映表裡的資料共同組成。
為了區別各個類這個型別也有型別碼,詳細情況如上面所述。
3,inheritancetype.table_per_class, 每個類對映為一張單獨的表,且每張表中不僅包含該錶對應類的特有的屬性,
還包含了該類可能的父類的所有屬性。
下面分別給出部分示例**:
1,inheritancetype.single_table
資料表:
部分**:
// 基類
@suppresswarnings("serial")
@entity
@table(name="league")
// 宣告繼承型別
@inheritance(strategy=inheritancetype.single_table)
// 指定自定義的型別碼列
@discriminatorcolumn(name="mydtype",// 資料表中型別碼列名
discriminatortype=discriminatortype.string, // 型別
length=20) // string和char可以指定長度
// 指定該類自定義型別碼值
@discriminatorvalue(value="league")
public class league implements serializable
// 其中乙個子類
@suppresswarnings("serial")
@entity
@discriminatorvalue(value="winterleague")
public class winterleague extends league implements serializable
// 插入與查詢**示例
winterleague wl = new winterleague("wl1","1111111");
em.persist(wl);
em.flush();
listwllist = em.createquery("select w from winterleague w").getresultlist();
system.out.println("wl size="+wllist.size());
2,inheritancetype.joined
這次換成使用系統自動生成的型別碼,注意在資料表中加入 dtype欄位
注意:只有基類對映的表的主鍵為自增,子表對映的主鍵值將由基表主鍵自動填寫
資料表圖:
部分**示例:
// 基類
@suppresswarnings("serial")
@entity
@inheritance(strategy=inheritancetype.joined)
@table(name="league")
public class league implements serializable
// 乙個子類
@suppresswarnings("serial")
@entity
@table(name="winterleague")
@primarykeyjoincolumn(name="winterid")
public class winterleague extends league implements serializable
// 執行**示例
winterleague wl = new winterleague("wl1","1111111");
em.persist(wl);
em.flush();
listwllist = em.createquery("select w from winterleague w").getresultlist();
system.out.println("wl size="+wllist.size());
3,inheritancetype.table_per_class
注意:一旦使用這種策略後主鍵生成策略就不能使用 auto 和 identity 了。
資料表圖:
超快速編寫ejb3 0的實體bean
相信很多同學 特別是新手朋友 編寫實體bean的時候感到繁瑣 特別是是表的元素比較多的時候,要寫比較多的對映的屬性。雖然在eclipse中有alt s,然後按 generate getters and setters可以快速的寫這些屬性的get和set的方法,但是ejb3.0的各種各樣注釋 特別涉及...
ejb的事務與實體bean
應該使用宣告方式控制事務還是使用程式設計方式控制事務?事務與實體bean 事務型別bean container bean container 首先不要誤解事務和實體bean的關係。ejb元件有兩種劃分事務邊界的方法 程式設計型和宣告型。程式設計型事務 大多數現有的系統都是用程式設計型來劃分事務邊界。...
ejb3 0改進給我帶來的一點感受
現在我連ejb2.0都還沒弄懂,ejb就開始改進了。以前是兩個介面乙個類,現在就乙個類就可以了,而且不用jndi了。所有給我的感受是什麼是永恆不變的?從ejb而言,為什麼ejb要改進,是因為ejb2.0太麻煩了,所以為迎合大眾的需求,開發的便利,最根本的是為ejb的普及,sun不得不改進ejb。所以...