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就没问题。是吗? 展开
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就没问题。是吗? 展开
1个回答
展开全部
应为你存StudentIdCard时没有对student属性赋值,所示是null
其实你没必要save(s) 只要studentIdCard.setStudent(s),然后再save(studentIdCard)就行了
按常理想想也是先有的student再有的studentIdCard
你先存studentIdCard符合逻辑吗
其实你没必要save(s) 只要studentIdCard.setStudent(s),然后再save(studentIdCard)就行了
按常理想想也是先有的student再有的studentIdCard
你先存studentIdCard符合逻辑吗
追问
其实我的目的就是想了解 :配置双向关联了,对我存储数据(先存哪个后存哪个)有影响吗?是不是双项关联只是为了方便数据的加载,仅此而已 ?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询