Hibernate基于外键和主键的双向一对一关系映射

基于外键的双向一对一关系映射
表结构:
这里写图片描述
类Person和类IdCard

public class Person {
    private int id;
    private String name;
    private int age;
    private IdCard idCard;
//get…set
}
public class IdCard{
    private int id;
    private String code;
   private Person person;

    //get…set
}

person.hbm.xml

<hibernate-mapping package="cn.siggy.pojo">
<class name="Person">
        <id name="id">
            <generator class="native"></generator>
        </id>
        <property name="name"/>
        <property name="age"/>
        <!-- 当unique设置为true时候可以设置一对一的关系 -->
        <many-to-one name="idCard" class="IdCard" cascade="save-update" column="idCard_Id"  
        foreign-key="fk_idCard" not-null="true"   unique="true">
        </many-to-one>
    </class>
</hibernate-mapping>

IdCard.hbm.xml(重点来了

<hibernate-mapping package="cn.siggy.pojo">
    <class name="IdCard">
        <id name="id">
            <generator class="native"></generator>
        </id>
        <property name="code"/>
        <one-to-one name="person" property-ref="idCard"/>
    </class>
</hibernate-mapping>

重点 重点就是理解为什么一的一端这么配置。
person有一个属性是IdCard,IdCard里面又有一个属性是person就是自己,所以在IdCard配置one-to-one的时候直接property-ref为many to one的name即可,可以看表结构,是相互参照的关系。


基于主键的双向一对一关系映射
这里写图片描述
类得写法不变
person.hbm.xml

<hibernate-mapping package="cn.siggy.pojo">
    <class name="Person">
        <id name="id">
            <!-- foreign表示引用外键 -->
            <generator class="foreign">
                <!-- 引用idCard属性所对应的主键 -->
                <param name="property">idCard</param>
            </generator>
        </id>
        <property name="name"/>
        <property name="age"/>
        <!-- 一对一 -->
        <one-to-one name="idCard" constrained="true" cascade="save-update"/>
    </class>
</hibernate-mapping>

IdCard.hbm.xml
加一句one to one即可

<hibernate-mapping package="cn.siggy.pojo">
    <class name="IdCard">
        <id name="id">
            <generator class="native"></generator>
        </id>
        <property name="code"/>
        <one-to-one name="person"/>
    </class>
</hibernate-mapping>

基于主键和外键区别其实就是基于主键已经知道了是主键来互相参照,所以不用多写名称,直接写one to one即可,而基于外键在一的一端要告诉参照哪个外键,所以指明关系字段的name。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值