JPA 的 @OneToMany 註解

@Target({METHOD, FIELD}) @Retention(RUNTIME)
public @interface OneToMany {
    Class targetEntity() default void.class;
    CascadeType[] cascade() default {};
    FetchType fetch() default EAGER;
    String mappedBy() default "";
}

targetEntity 屬性指定關聯實體的類型,通常能夠不指定,直接從集合類型的範型中獲取。例如:數據庫

@OneToMany
List<Address> addresses;

Address就是關聯實體的類型。app

cascade 是級聯類型,能夠選如下類型中的一個或幾個:fetch

  • CascadeType.PERSIST (級聯保存) 保存實體也保存關聯對象;
  • CascadeType.REMOVE (級聯刪除) 刪除實體也刪除關聯對象;
  • CascadeType.REFRESH (級聯刷新) 刷新實體時也刷新關聯對象;
  • CascadeType.MERGE (級聯更新)更新實體也更新關聯對象。 或者使用CascadeType.ALL,表示選擇所有四項。

fetch屬性表明加載方式有 FetchType.LAZY 和 FetchType.EAGER兩種。code

mappedBy 屬性指定關聯實體的屬性,例如Order 與 OrderItem是一對多的關聯,OrderItem中有一個orderId屬性執行Order 的id,那麼mappedBy的值即爲orderId。注意,此處的值是屬性值而非數據庫中列名。可使用@JoinColumn註解來替代mappedBy屬性,可是@JoinColumn的name屬性指定的是數據庫中的列名。綜上,如下兩種方式的映射是等價的:對象

@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER, mappedBy="orderId")
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@JoinColumn(name="order_id")
相關文章
相關標籤/搜索