SpringBoot JPA 註解使用手冊

一 @OneToMany,@ManyToOne註釋的使用

在這裏插入圖片描述

@Entity
public class Employee {
  @Id
  @Column(name="EMP_ID")
  private long id;
  ...
  @OneToMany(mappedBy="owner")
  private List<Phone> phones;
  ...
}
@Entity
public class Phone {
  @Id
  private long id;
  ...
  @ManyToOne(cascade = CascadeType.ALL, fetch=FetchType.LAZY)
  @JoinColumn(name="OWNER_ID")
  private Employee owner;
  ...
}

fetch 加載類型,默認情況一的方爲立即加載,多的一方爲延遲加載

fetch=FetchType.LAZY的意思是select的時候懶加載,當加載phone這個對象的時候,會加載他的屬性,如id,firstname,lastname,但是不會去加載owner的屬性。如果不設置fetch=FetchType.LAZY,則默認是eager,不僅會加載id,firstname,lastname等屬性,而且會加載owner裏面的屬性。
JoinColumn指的是Phone(多)表對應Employee(一)表關聯字段的名稱。

cascade: 級聯類型

Java持久性體系結構支持的級聯類型如下:

CascadeType.PERSIST:級聯類型presist表示save()或persist()操作級聯到相關實體。
CascadeType.MERGE:級聯類型merge表示合併擁有的實體時合併相關的實體。
CascadeType.REFRESH:級聯類型refresh對refresh()操作執行相同的操作。
CascadeType.REMOVE:級聯類型在remove刪除擁有實體時會刪除與此設置關聯的所有相關實體。
CascadeType.DETACH:detach如果發生“手動分離”,則級聯類型分離所有相關實體。
CascadeType.ALL:級聯類型all是上述所有級聯操作的簡寫。
注意: JPA中沒有默認的級聯類型。默認情況下,沒有操作級聯。

mappedBy 關係維護

mappedBy= “parent” 表示在ListEntity類中的 parent 屬性來維護關係,這個名稱必須和ListEntity中的parent屬性名稱完全一致才行
OneToMany必須寫mappedBy,不然會多生成一張沒用的中間表,因爲如果沒寫mappedBy,JPA不知道具體怎樣做關聯

JoinColumn

@JoinColumn與@Column標記一樣,是用於註釋表中的字段的。它的屬性與@Column屬性有很多相同之處,例如name屬性是用來標識表中所對應的字段的名

稱,其它的不再詳述。

@JoinColumn與@Column相區別的是:@JoinColumn註釋的是保存表與表之間關係的字段,它要標註在實體屬性上(相當於外鍵)。而@Column標註的是表中不包含表關係的字段。

參考:
https://en.wikibooks.org/wiki/Java_Persistence/OneToMany
https://howtodoinjava.com/hibernate/hibernate-jpa-cascade-types/
https://www.cnblogs.com/xuwenjin/p/8831129.html (簡單)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章