一个客户对应一个地址,通过客户可以获得该客户的地址信息。客户和地址是一对一的关系,但通过地址不能获得客户信息,客户和地址是单向关联。如图所示为客户实体和地址实体的类关系图。
在数据库中,对应的表customer和表address定义的结构SQL语句如下所示。
--客户表
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)
)
表customer中的address_id字段为表address中的id的值。通过address_id,可以找到对应的address记录。
表中存在数据时,如图所示。
此时将表customer映射为CustomerEO实体,代码如下所示。
@Entity
@Table(name = "customer")
public class CustomerEO implements java.io.Serializable {
private Integer id;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
……
private AddressEO address;
@OneToOne(cascade = { CascadeType.ALL })
@JoinColumn(name = "address_id")
public AddressEO getAddress() {
return address;
}
public void setAddress(AddressEO address) {
this.address = address;
}
}
此时将表address映射为AddressEO实体,代码如下所示。
@Entity
@Table(name = "address")
public class AddressEO implements java.io.Serializable {
private Integer id;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
private String province;
private String city;
private String postcode;
private String detail;
……getter和setter方法省略
}