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