一对一单双向主键关联

在数据库里面单向和双向其实没区别,它的区别主要在于java程序里面,如果是双向的,通过wife也能找到husband,如果是单向的,通过wife找不到husband。

主键关联在annotation里面是用@PrimaryKeyJoinColumn,但是做实验并没有发现主键有做关联,所以hibernate的这个有bug,主键关联不重要。

用xml设置,

<class name="StuIdCard">
    
        <id name="id">
            <generator class="foreign">
            <param name="property">student</param>
</generator>

</id> <property name="num"></property> <one-to-one name="student" constrained="true"></one-to-one> </class>

先插student,student有了id再插stuIdCard。

在项目中,一对一很少,一对一的主键也很少,所以一般不用。

一对一双向主键关联:

在annotation相关联的两个类都使用@OneToOne  、 @PrimaryKeyJoinColumn

在xml里面

<class name="Student" table="student">
    
    <!-- 以下为字段的映射 -->
        <!-- id为主键,name="id"指的是类里面的属性,getId()方法,所以对应的字段还可以指定成别的。
            因为实体类的属性名和表中字段名一致,所以column=""可以省略了-->
        <id name="id" column="id">
            <generator class="native"></generator>
        </id> 
        <!-- 普通属性 -->
        <property name="name"></property>
        <property name="age"></property>
        <one-to-one name="stuIdCard" property-ref="student"></one-to-one>
    </class>
<class name="StuIdCard">
    
        <id name="id">
            <generator class="foreign">
            <param name="property">student</param>
            </generator>
        </id> 
        
        <property name="num"></property>
        <one-to-one name="student" constrained="true"></one-to-one>
    </class>
原文地址:https://www.cnblogs.com/ligui989/p/3465524.html