通过表关联的方式来映射一对多的关系时,要使用@JoinTable这个标记。该标记的定义如下所示。
@Target({METHOD, FIELD})
public @interface JoinTable {
String name() default "";
String catalog() default "";
String schema() default "";
JoinColumn[] joinColumns() default {};
JoinColumn[] inverseJoinColumns() default {};
UniqueConstraint[] uniqueConstraints default {};
}
在使用此@JoinTable标记时,需要注意以下几个问题。
l 该标记与@Table注释类似,用于标注用于关联的表。可以标注在方法或者属性上,属性catalog、schema和uniqueConstraint与@Table注释中的属性意义类似,请读者参阅@Table注释说明的部分。
l name属性为连接两个表的表名称。若不指定,则使用默认的表名称如下所示。
“表名1”+“_”+“表名2”。
例如以上的代码中,如果不指定name的名称,默认的保存关系的名称如下所示。
“customer_address”。
l joinColumns属性表示,在保存关系中的表中,所保存关联关系的外键的字段。并配合@JoinColumn标记使用。
例如以下的映射配置,表示字段customer_id为外键关联到customer表中的id字段。
joinColumns={
@JoinColumn(name="customer_id",referencedColumnName="id")
}
l inverseJoinColumns属性与joinColumns属性类似,它保存的是保存关系的另一个外键字段。
例如以下的映射配置,表示字段address_id为外键关联到address表中的id字段。
inverseJoinColumns={
@JoinColumn(name="address_id",referencedColumnName="id")
}
提示:@JoinTable不仅能够定义一对多的关联,也可以定义多对多表的关联,有关这部分内容将在本章的下文中详细讲述。