Hibernate注解(一)之持久化实体
翻譯自? ?Hibernate Annotations
1. 創(chuàng)建POJO作為持久化實體
每個持久化POJO類都是一個實體,并使用 @Entity注解(在類級別)聲明:
@Entity public class Flight implements Serializable {Long id;@Idpublic Long getId() { return id; }public void setId(Long id) { this.id = id; } }@Entity將該類聲明為一個實體(即一個持久的POJO類),@Id聲明該實體的標識符屬性。其他映射聲明是隱式的。類Flight被映射到Flight表,使用列ID作為其主鍵列。
根據(jù)是否注釋字段或方法,Hibernate使用的訪問類型將為field或 property。EJB3規(guī)范要求您對將要訪問的元素類型聲明注釋,例如,如果使用property訪問權(quán)限,則使用getter方法;如果使用訪問權(quán)限,則使用該字段field。應(yīng)該避免在兩個字段和方法中混合注釋。Hibernate會從@Idor 的位置猜測訪問類型@EmbeddedId。
1.1. 定義表格
@Table被設(shè)置在課堂級別; 它允許您為實體映射定義表,目錄和模式名稱。如果no @Table定義,則使用默認值:實體的非限定類名稱。
該@Table元素包含一個 schema和catalog屬性,如果它們需要被定義。您還可以使用@UniqueConstraint注釋連同@Table(為了綁定到單個列的唯一約束,建議使用該 @Column.unique方法(參考以@Column獲取更多信息))來 為表定義唯一約束。
邏輯列名由Hibernate NamingStrategy實現(xiàn)定義 。默認的JPA命名策略使用物理列名稱作為邏輯列名,但如果您使用自定義NamingStrategy 實現(xiàn)將fld_附加到所有列中,它可能會有所不同。請注意,當明確設(shè)置列名稱時,邏輯列名稱不一定等于屬性名稱esp。除非你重寫NamingStrategy,否則你不應(yīng)該擔心。
1.2.??版本控制樂觀鎖定
您可以使用@Version注釋向?qū)嶓w添加樂觀鎖定功能 :
????????版本屬性將被映射到 OPTLOCK列,實體管理器將使用它來檢測沖突更新(防止丟失的更新,否則您可能會看到上次提交 - 贏取策略)。
?????版本列可以是數(shù)字(推薦的解決方案)或時間戳。Hibernate支持任何種類的類型,只要你定義并實現(xiàn)適當?shù)?UserVersionType。
????????應(yīng)用程序不得以任何方式更改由Hibernate設(shè)置的版本號。要人為增加版本號,請查看Hibernate Entity Manager的參考文檔 LockModeType.OPTIMISTIC_FORCE_INCREMENT或 LockModeType.PESSIMISTIC_FORCE_INCREMENT。
總結(jié)
以上是生活随笔為你收集整理的Hibernate注解(一)之持久化实体的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 创维推出 F27G51Q 显示器:27
- 下一篇: 本田与三菱签署协议:推动电动汽车商用,探