Hibernate自動生成實體類注解_第1頁
Hibernate自動生成實體類注解_第2頁
Hibernate自動生成實體類注解_第3頁
Hibernate自動生成實體類注解_第4頁
Hibernate自動生成實體類注解_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、Hibernate自動生成實體類注解分類: HibernateSSH2012-09-17 02:411257人閱讀評論(0)收藏舉報常用的hibernate annotation標簽如下:Entity -注釋聲明該類為持久類。將一個Javabean類聲明為一 個實體的數(shù)據(jù)庫表映射類,最好實現(xiàn)序列化.此時,默認情況下,所有的類屬性都為映射到數(shù)據(jù)表的持久性字段.若在類中,添加另外屬性,而非映射來數(shù)據(jù)庫的, 要用下面的Transient來注解.Table(name="promotion_info") -持久性映射的表(表名="promotion_info).Table是

2、類一級的注解,定義在Entity下,為實體bean映射表,目錄和schema的名字,默認為實體bean的類名,不帶包名.Id-注釋可以表明哪種屬性是該類中的獨特標識符(即相當于數(shù)據(jù)表的主鍵)。 GeneratedValue -定義自動增長的主鍵的生成策略.Transient -將忽略這些字段和屬性,不用持久化到數(shù)據(jù)庫.適用于,在當前的持久類中,某些屬性不是用于映射到數(shù)據(jù)表,而是用于其它的業(yè)務邏輯需要,這時,須將這些屬性進行transient的注解.否則系統(tǒng)會因映射不到數(shù)據(jù)表相應字段而出錯.Temporal(TemporalType.TIMESTAMP)-聲明時間格式Enumerated -聲明

3、枚舉Version -聲明添加對樂觀鎖定的支持OneToOne -可以建立實體bean之間的一對一的關聯(lián)OneToMany -可以建立實體bean之間的一對多的關聯(lián)ManyToOne -可以建立實體bean之間的多對一的關聯(lián)ManyToMany -可以建立實體bean之間的多對多的關聯(lián)Formula -一個SQL表達式 這種屬性是只讀的,不在數(shù)據(jù)庫生成屬性(可以使用sum、average、max等)OrderBy -Many端某個字段排序(List) Hibernate注解詳細說Hibernate注解詳細說明1、Entity(name="EntityName")必須name

4、為可選,對應數(shù)據(jù)庫中一的個表2、Table(name="",catalog="",schema="")可選通常和Entity配合使用,只能標注在實體的class定義處,表示實體對應的數(shù)據(jù)庫表的信息 name:可選,表示表的名稱.默認地,表名和實體名稱一致,只有在不一致的情況下才需要指定表名catalog:可選,表示Catalog名稱,默認為Catalog("").schema:可選,表示Schema名稱,默認為Schema("").3、id必須id定義了映射到數(shù)據(jù)庫表的主鍵的屬性,一個實體只能有

5、一個屬性被映射為主鍵.置于getXxxx ()前.4、GeneratedValue(strategy=GenerationType,generator="")可選strategy:表示主鍵生成策略,有AUTO,INDENTITY,SEQUENCE 和 TABLE 4種,分別表示讓ORM 框架自動選擇,根據(jù)數(shù)據(jù)庫的Identity字段生成,根據(jù)數(shù)據(jù)庫表的Sequence字段生成,以有根據(jù)一個額外的表生 成主鍵,默認為AUTOgenerator:表示主鍵生成器的名稱,這個屬性通常和ORM框架相關,例如,Hibernate可以指定 uuid等主鍵生成方式.generator =

6、"uuid" :由Hibernate基于128 位唯一值產(chǎn)生算法生成16 進制數(shù)值(編碼后以長度32 的字符串表示)作為主鍵。示例:IdGeneratedValues(strategy=StrategyType.SEQUENCE)public int getPk() return pk; IdGeneratedValue(strategy=GenerationType.SEQUENCE, generator="S_Teacher") SequenceGenerator(name="S_Teacher",allocationSize=1

7、,initialValue=1,sequenceName="S_Teacher")5、Basic(fetch=FetchType,optional=true)可選Basic表示一個簡單的屬性到數(shù)據(jù)庫表的字段的映射,對于沒有任何標注的getXxxx()方法,默認 即為Basicfetch: 表示該屬性的讀取策略,有EAGER和LAZY兩種,分別表示主支抓取和延遲加載,默認為EAGER.(1)、FetchType.LAZY:懶加載,加載一個實體時,定義懶加載的屬性不會馬上從數(shù)據(jù)庫中加載。(2)、FetchType.EAGER:急加載,加載一個實體時,定義急加載的屬性會立即從數(shù)據(jù)

8、庫中加載。(3)、比方User類有兩個屬性,name跟address,就像百度知道,登錄后用戶名是需要顯示出來的,此屬性用到的幾率極大,要馬上到數(shù)據(jù)庫查,用急加載;而用戶地址大多數(shù)情況下不需要顯示出來,只有在查看用戶資料是才需要顯示,需要用了才查數(shù)據(jù)庫,用懶加載就好了。所以,并不是一登錄就把用戶的所有資料都加載到對象中,于是有了這兩種加載模式。 optional:表示該屬性是否允許為null,默認為true示例:Basic(optional=false)public String getAddress() return address; 6、Column可選Column描述了數(shù)據(jù)庫表中該字段的

9、詳細定義,這對于根據(jù)JPA注解生成數(shù)據(jù)庫表結構的工具非常 有作用.name:表示數(shù)據(jù)庫表中該字段的名稱,默認情形屬性名稱一致nullable:表示該字段是否允許為null,默認為trueunique:表示該字段是否是唯一標識,默認為falselength:表示該字段的大小,僅對String類型的字段有效insertable:表示在ORM框架執(zhí)行插入操作時,該字段是否應出現(xiàn)INSETRT語句中,默認為trueupdateable:表示在ORM框架執(zhí)行更新操作時,該字段是否應該出現(xiàn)在UPDATE語句中,默認為 true.對于一經(jīng)創(chuàng)建就不可以更改的字段,該屬性非常有用,如對于birthday字段.c

10、olumnDefinition:表示該字段在數(shù)據(jù)庫中的實際類型.通常ORM框架可以根據(jù)屬性類型自動判 斷數(shù)據(jù)庫中字段的類型,但是對于Date類型仍無法確定數(shù)據(jù)庫中字段類型究竟是DATE,TIME還是 TIMESTAMP.此外,String的默認映射類型為VARCHAR,如果要將String類型映射到特定數(shù)據(jù)庫的 BLOB或TEXT字段類型,該屬性非常有用.示例:Column(name="BIRTH",nullable="false",columnDefinition="DATE")public String getBithday()

11、return birthday; 7、Transient可選Transient表示該屬性并非一個到數(shù)據(jù)庫表的字段的映射,ORM框架將忽略該屬性. 如果一個屬性并非數(shù)據(jù)庫表的字段映射,就務必將其標示為Transient,否則,ORM框架默認其注 解為Basic示例: /根據(jù)birth計算出age屬性Transientpublic int getAge() return getYear(new Date() - getYear(birth); 8、ManyToOne(fetch=FetchType,cascade=CascadeType)可選ManyToOne表示一個多對一的映射,該注解標注的屬性

12、通常是數(shù)據(jù)庫表的外鍵optional:是否允許該字段為null,該屬性應該根據(jù)數(shù)據(jù)庫表的外鍵約束來確定,默認為true fetch:表示抓取策略,默認為FetchType.EAGERcascade:表示默認的級聯(lián)操作策略,可以指定為ALL,PERSIST,MERGE,REFRESH和REMOVE中的若 干組合,默認為無級聯(lián)操作targetEntity:表示該屬性關聯(lián)的實體類型.該屬性通常不必指定,ORM框架根據(jù)屬性類型自動判 斷targetEntity.示例:/訂單Order和用戶User是一個ManyToOne的關系/在Order類中定義ManyToOne()JoinColumn(name=

13、"USER")public User getUser() return user; 9、JoinColumn可選JoinColumn和Column類似,介量描述的不是一個簡單字段,而一一個關聯(lián)字段,例如.描述一個 ManyToOne的字段.name:該字段的名稱.由于JoinColumn描述的是一個關聯(lián)字段,如ManyToOne,則默認的名稱由 其關聯(lián)的實體決定. 例如,實體Order有一個user屬性來關聯(lián)實體User,則Order的user屬性為一個外鍵, 其默認的名稱為實體User的名稱+下劃線+實體User的主鍵名稱 示例: 見ManyToOne10、OneToMa

14、ny(fetch=FetchType,cascade=CascadeType)可選OneToMany描述一個一對多的關聯(lián),該屬性應該為集體類型,在數(shù)據(jù)庫中并沒有實際字段. fetch:表示抓取策略,默認為FetchType.LAZY,因為關聯(lián)的多個對象通常不必從數(shù)據(jù)庫預先讀取 到內(nèi)存cascade:表示級聯(lián)操作策略,對于OneToMany類型的關聯(lián)非常重要,通常該實體更新或刪除時,其 關聯(lián)的實體也應當被更新或刪除 例如:實體User和Order是OneToMany的關系,則實體User被刪除時,其關聯(lián)的實體Order也應該 被全部刪除示例:OneTyMany(cascade=ALL)publi

15、c List getOrders() return orders; 11、OneToOne(fetch=FetchType,cascade=CascadeType)可選OneToOne描述一個一對一的關聯(lián)fetch:表示抓取策略,默認為FetchType.LAZYcascade:表示級聯(lián)操作策略示例:OneToOne(fetch=FetchType.LAZY)public Blog getBlog() return blog; 12、ManyToMany可選ManyToMany 描述一個多對多的關聯(lián).多對多關聯(lián)上是兩個一對多關聯(lián),但是在ManyToMany描述 中,中間表是由ORM框架自動處理

16、mappedBy:表示多對多關聯(lián)的另一個實體類的對應集合屬性名稱示例:User實體表示用戶,Book實體表示書籍,為了描述用戶收藏的書籍,可以在User和Book之間 建立ManyToMany關聯(lián)Entitypublic class User private List books;public List getBooks() return books; public void setBooks(List books) this.books=books; Entitypublic class Book private List users;public List getUsers() retur

17、n users; public void setUsers(List users) this.users=users; 兩個實體間相互關聯(lián)的屬性必須標記為ManyToMany,并相互指定targetEntity屬性, 需要注意的是,有且只有一個實體的ManyToMany注解需要指定mappedBy屬性,指向targetEntity的集合屬性名稱 利用ORM工具自動生成的表除了User和Book表外,還自動生成了一個User_Book表,用于實現(xiàn)多對多關聯(lián)13、MappedSuperclass可選MappedSuperclass可以將超類的JPA注解傳遞給子類,使子類能夠繼承超類的JPA注解示例:MappedSuperclasspublic class Employee() . Entitypublic class Engineer extends Employee . Entity public class Manager extends Employee . 14、Embedded可選Embe

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論