hibernate-关系映射(一对一(单向、双向))-8

对象之间的关系(重要)

指的是对象间的关联关系

  • 一对一
    单向(主键、外键)
    双向(主键、外键)
    中间表(很少用)
  • 一对多
    单向
    双向
  • 多对一
    单向
    双向
  • 多对多
    单向
    双向

一对一

单向(主键、外键)

  • 外键关联
// husband和wife   husband中的wifeid 参考wife的id
@Entity
public class Husband {
    private String name;
    private int id;
    private Wife wife;
    @OneToOne
    @JoinColumn(name = "wifeid")
    public Wife getWife() {
        return wife;
    }
    public void setWife(Wife wife) {
        this.wife = wife;
    }
    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }
 }
@Entity
public class Wife {
    private  String name;
    private  int id;

    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }
...
}

用xml

<hibernate-mapping package="relationship">
    <!--table 属性不配就是默认-->
    <class name="Husband">
        <id name="id">
            <generator class="native"/>
        </id>
        <property name="name"/>
        <many-to-one name="wife" column="wifeid" unique="true"/>
    </class>
</hibernate-mapping>
  • 主键关联(不重要)
    @PrimaryKeyJoinColumn
<one-to-one name="studentIDCard" constrained="true"/>

双向(主键、外键)

  • 主键(不重要)
  • 外键
    存在双向外键关联是,必设mappedby
@Entity
public class Husband {
    private String name;
    private int id;
    private Wife wife;
    @OneToOne
    @JoinColumn(name = "wifeid")
    public Wife getWife() {
        return wife;
    }
}
@Entity
public class Wife {
    private  String name;
    private  int id;
    private Husband husband;

    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @OneToOne(mappedBy = "wife")
    public Husband getHusband() {
        return husband;
    }
}

xml中:
一个xml和另一个xml的配置

<many-to-one name="studentIDCard" unique="true"/>
<one-to-one name="student" property-ref="studentIDCard"/>

联合主键关联(有可能会有)

一对多

单向
双向

多对一

单向
双向

多对多

单向
双向

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值