現在EJB3實(shí)體Bean是純粹的POJO。實(shí)際上表達了和Hibernate持久化實(shí)體對象同樣的概念。他們的映射都通過(guò)JDK5.0注釋來(lái)定義(EJB3規范中的XML描述語(yǔ)法至今還沒(méi)有定下來(lái))。注釋分為兩個(gè)部分,分別是邏輯映射注釋和物理映射注釋?zhuān)ㄟ^(guò)邏輯映射注釋可用描述對象模型,類(lèi)之間的關(guān)系等等,而物理映射注釋則描述了物理的schema,表,列,索引等等。下面外面在代碼中將混合使用這兩種類(lèi)型的注釋
(一)聲明實(shí)體
@Entity
POJO用@Entity進(jìn)行實(shí)體注釋
@Table
@Table是類(lèi)的一級注釋?zhuān)ㄟ^(guò)它可用為實(shí)體指定表(Table),目錄(Catalog),和schema的名字,如果沒(méi)有@Table,那么系統自動(dòng)使用默認值:實(shí)體的短類(lèi)名(不帶包名)
@Version
可用在實(shí)體Bean中使用@Version添加樂(lè )觀(guān)鎖支持。
根據EJB3規范,Version列可以使用numeric類(lèi)型(推薦方式)也可以使用timestamp類(lèi)型。Hibernate支持任何自定義類(lèi)型,只要該類(lèi)型實(shí)現了UserVersionType.
(二)映射簡(jiǎn)單屬性
實(shí)體Bean中的所有非static、非transient的屬性都可以被持久化。同時(shí)使用@Transient對屬性進(jìn)行注解同樣不不會(huì )被持久化。
@Column
使用@Column可將屬性映射到列。
@Column(name = “列名” length = 長(cháng)度)
例如:
@Column(name = “NAME” length = 20)
public String getName() {
return this.name;
}
注意:
當POJO用有屬性不需要映射的時(shí)候一定要用@Transient修飾
@Lob注解表示將屬性持久化為Blob或者Clob類(lèi)型,具體取決于屬性的類(lèi)型,java.sql.Clob,Character[ ]和 char[] 和 java.lang.String這些屬性都被持久化為Clob類(lèi)型,而java.sql.Blob,Byte[],byte[] 和 serializable類(lèi)型在被持久化為Blob類(lèi)型
(三)映射主鍵屬性
@Id
使用@Id注解可以將實(shí)體Bean中的某個(gè)屬性定為為標識符(identifier)。該屬性值可以通過(guò)應用自身創(chuàng )建,也可以通過(guò)Hibernate生成(推薦)。使用@GeneratedValue注釋利用定義標識符的生產(chǎn)策略:
*AUTO 可以是一下三種任意一種類(lèi)型,取決于地層數據庫的不同
*TABLE 使用表保存id值
*IDENTITY identity column
*SEQUENCE sequence
@Id
@GeneratedValue(strategy = GenerationType.IDENTITy)
Public Integer getId() {… …}
在Hibernate的應用中提供了更加豐富的主鍵生產(chǎn)策略。
@org.hibernate.annotations.GenericGeneracor允許定義一個(gè)Hibernate特定的id生成器。
例:















Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1561685
聯(lián)系客服