@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
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")