在数据库里面单向和双向其实没区别,它的区别主要在于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>