Hibernate——组合关系映射

数据库建表:
提倡粗粒度,相关的字段放在一张表里面,减少外键之间的关系。
实体类:
实体类设计的时候提倡细粒度。

例子:

联系方式和地址之间的关系是组合关系:
联系方式和地址之间是组合关系。

实体类:

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;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容