hibernate一对一双向外键关联

我在测试一对一双向外键,有个地方不太理解,先贴上代码:Student类:privateintid;privateStringname;privateintage;priv... 我在测试一对一双向外键,有个地方不太理解,先贴上代码:
Student类:
private int id;
private String name;
private int age;
private StudentIdCard studentIdCard ;
// set/get 方法省略
StudentIdCard类:
private int id;
private String num;
private Student student ;
// set/get 方法省略
Student.hbm.xml
<hibernate-mapping package="cn.hq.hibernate.model">
<class name="Student" >
<id name="id" >
<generator class="native"></generator>
</id>
<property name="name" />
<property name="age" />
<one-to-one name="studentIdCard" property-ref="student"></one-to-one>
</class>
</hibernate-mapping>
StudentIdCard.hbm.xml:
<hibernate-mapping>
<class name="cn.hq.hibernate.model.StudentIdCard" >
<id name="id" >
<generator class="native"></generator>
</id>
<property name="num" />
<many-to-one name="student" column="student_Id" unique="true" ></many-to-one>
</class>
</hibernate-mapping>
测试类:
@Test
public void save(){
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
StudentIdCard studentIdCard = new StudentIdCard() ;
studentIdCard.setNum("card0001") ;
session.save(studentIdCard) ;

Student s = new Student() ;
s.setAge(12) ;
s.setName("zzss");
s.setStudentIdCard(studentIdCard);
session.save(s);
session.getTransaction().commit();

}
这样保存之后,表的情况如下:

这是Student表。

这是StudentIdCard表。
我不明白的地方:
我是先存的StudentIdCard 类,再存student类,这样的话StudentIdCard 表里的student_Id就为null。如果反过来存,字段就都可以设置上。这是为什么呢?我理解的不是很透彻
Student.hbm.xml中的【property-ref】属性,我理解起来是把控制权交给了对方(StudentIdCard)来管理。这也就导致保存的时候 如果先保存Student 后保存StudentIdCard就没问题。是吗?
展开
 我来答
百度网友1f9c3e2
2014-03-28 · TA获得超过1836个赞
知道小有建树答主
回答量:638
采纳率:100%
帮助的人:397万
展开全部
应为你存StudentIdCard时没有对student属性赋值,所示是null
其实你没必要save(s) 只要studentIdCard.setStudent(s),然后再save(studentIdCard)就行了
按常理想想也是先有的student再有的studentIdCard
你先存studentIdCard符合逻辑吗
追问
其实我的目的就是想了解 :配置双向关联了,对我存储数据(先存哪个后存哪个)有影响吗?是不是双项关联只是为了方便数据的加载,仅此而已 ?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式