数据库建表:
提倡粗粒度,相关的字段放在一张表里面,减少外键之间的关系。
实体类:
实体类设计的时候提倡细粒度。
例子:
联系方式和地址之间的关系是组合关系:
联系方式和地址之间是组合关系。
实体类:
Contact类:
- id : int
- phoneNum : String
- homeAddress : Address
- workAddress : Address
- email : String
Address类:
- province : String
- city : String
- detail : String
- district : String
数据库:
CONTACT表
pk:ID
PHONENUM
......
EMAIL
HOMEPROVINCE
HOMECITY
HOMEDISTRICT
contact的xml:
<!-- 映射组合关系中的部分实体
component:组合
name:整体类中的属性名 -->
<component name="homeAddress" class="Address">
<property name="province" column="home_province"></property>
<property name="city" column="home_city"></property>
</component>
<component name="workAddress" class="Address">
<property name="province" column="work_province"></property>
<property name="city" column="work_city"></property>
</component>
使用注解方式配置:
address类:
@Embeddable:表示是嵌入类。
@Embeddable
public class Address {
}
contact类(整体类):
@Embedded:
@Embedded
@AttributeOverrides(value={
@AttributeOverride(
name="province",
column=@Column(name="home_province")),
@AttributeOverride(
name="city",
column=@Column(name="home_city"))
})
public Address getHomeAddress() {
return homeAddress;
}
public void setHomeAddress(Address homeAddress) {
this.homeAddress = homeAddress;
}