*AUTO 能夠是一下三種任意一種類型,取決於地層數據庫的不一樣java
*TABLE 使用表保存id值web
*IDENTITY identity column數據庫
@Id @GeneratedValue(strategy = GenerationType.IDENTITy) Public Integer getId() {… …}
@Id @GeneratedValue(generator = "system-uuid")[該屬性名自定義] @GenericGenerator(name = " system-uuid ", strategy = "uuid") [name可自定義,可是strategy屬性必須是Hibernate中有效的主鍵策略] @Column (name = "user_id") private Integer userId;
@Id @GeneratedValue(generator = "hilo") @GenericGenerator(name = "hilo", strategy = "hilo") @Column (name = "user_id") private Integer userId;
註釋分爲兩類,分別是Logical mapping和Physical mapping,經過Logical mapping可用描述對象模型,類之間的關係等等,而Physical mapping註釋則描述了物理的schema,表,列,索引等等。緩存
mappedBy值對應@OneToOne或@ManyToOne標註的屬性值,至關於inverse=true,指定不須要維護關係的一端。併發
好比校長不須要記住每一個人的名字,每一個人來記校長的名字。由多的一端來維護。app
多對多關聯:ide
經過@ManyToMany註解可定義多對多關聯。同時,也須要經過註解@JoinTable描述關聯表和關聯條件。對於雙向關聯,其中一端必須定義爲owner,另外一端必須定義爲inverse(在對關聯表進行更性操做時這一端將被忽略)。被關聯端沒必要也不能描述物理映射,只須要一個簡單的mappedBy參數,該參數包含了主體端的屬性名,這樣就綁定了雙方的關係。 fetch
功能說明:
@ManyToMany註解
targetEntity屬性:指向被關聯端的實體對象
cascade屬性:與Hibernate xml配置文件中的意思同樣,這裏選用兩種方式
CascadeType.PERSIST:若實體是處於被管理狀態,或當persist()方法被調用時,觸發級聯建立(create)操做。
CascadeType.MERGE:若實體是處於被管理狀態,或當merge)方法被調用時,觸發級聯合並(merge)操做。
其它屬性如CascadeType.REMOVE、CascadeType.REFRESH、CascadeType.ALL等屬性可參考Hibernate Annotations Reference。
fetch屬性:關聯關係獲取方式
LAZY(默認值)在第一次訪問關聯對象時才觸發相應的查詢操做。
另外一個值EAGER是經過out join select直接獲取關聯對象
@JoinTable註解
name屬性:指定關聯表名 若不指定Hibernate能夠根據既定的規則自動生成(具體規則見reference)
joinColumns屬性:指定主體端的外鍵
inverseJoinColumns屬性:指定被關聯端的外鍵ui
@Cache註解
usage屬性:給定了緩存的併發策略spa
@ManyToMany註解
mappedBy屬性:指定了主體端的屬性名,用以綁定雙方的關係