6.3.4 一对多@OneToMany

来源:互联网 发布:rpg游戏制作教程java 编辑:程序博客网 时间:2024/06/05 15:25
6.3.4 一对多@OneToMany
2008-05-11 14:59 3359人阅读 评论(0)收藏 举报

@OneToMany标记用于标注实体关系为一对多。在实体CustomerEO与实体AddressEO的关系是一对多的关系。注释@OneToMany的定义的代码如下所示

@Target({METHOD, FIELD}) @Retention(RUNTIME)

public @interface OneToMany {

Class targetEntity() default void.class;

CascadeType[] cascade() default {};

FetchType fetch() default LAZY;

String mappedBy() default "";

}

在使用此@OneToMany标记时,需要注意以下几个问题。

l         targetEntity属性表示默认关联的实体类型。因为一对多的实体集合时保存在集合类中,所以必须指明集合类中保存的具体类型。以下两种方案必须任选一种。

1)指定集合泛型的具体类型,如以上例中的代码所示。

         private Collection<AddressEO> addresses = new ArrayList<AddressEO>();

 

         @OneToMany(cascade = { CascadeType.ALL })

         @JoinColumn(name = "customer_id")

         public Collection<AddressEO> getAddresses() {

                   return addresses;

         }

2)指定targetEntity属性类型,如下代码所示。

         private Collection addresses = new ArrayList();

 

         @OneToMany(targetEntity=AddressEO.class,cascade = { CascadeType.ALL })

         @JoinColumn(name = "customer_id")

         public Collection getAddresses() {

                   return addresses;

         }

l         cascade属性和fetch属性所表示的意义与@OneToOne标记中类似,请读者参阅@OneToOne的属性说明。但要注意的是,@OneToManyfetch属性默认为惰性加载LAZY的,这是因为集合类如果使用即时加载的话,会浪费很多资源。所以一般建议使用惰性加载。

l         mappedBy属性用于标记当实体间的关系是双向时使用,在本章的6.5.2小节中将会详细讲述