如果表中的使用了外键关联(Foreign Key),则在映射实体关系时不需要作其它的设置,实体管理器将会默认映射外键所定义的两个表。
例如使用以下SQL语句创建表customer和表address:
--客户表
CREATE TABLE customer (
id int(20) NOT NULL auto_increment,
name varchar(100) ,
address_id int(20) ,
PRIMARY KEY (id)
)
--地址表
CREATE TABLE address (
id int(20) NOT NULL auto_increment,
province varchar(50) ,
city varchar(50) ,
postcode varchar(50) ,
detail varchar(50) ,
PRIMARY KEY (id)
)
--创建外键
ALTER TABLE customer ADD CONSTRAINT fk_customer_address
FOREIGN KEY (address_id) REFERENCES address (id);
这样,CustomerEO中的映射可以简化为以下代码所示。
@Entity
@Table(name = "customer")
public class CustomerEO implements java.io.Serializable {
……
private AddressEO address;
@OneToOne
public AddressEO getAddress() {
return address;
}
public void setAddress(AddressEO address) {
this.address = address;
}
}
使用外键利用的是数据库底层的机制,有利于数据的完整性。但使用外键减少了数据的灵活性,尤其是在数据库分开部署时,最好不要采用外键的方式。所以是否采用外键进行实体间关系的映射要视具体情况而定。