首页 > 代码库 > hibernate学习四(关系映射一对一)
hibernate学习四(关系映射一对一)
一、关系映射简介
在数据库中,表与表的关系,仅有外键。但使用hibernate后,为面向对象的编程,对象与对象的关系多样化;如 一对一,一对多,多对多,并具有单向和双向之分。
开始练习前,复制上一次项目,并更名为
二、一对一单向外键关联
例如:一个老师只教一个学生,一个学生只能被一个老师教
关系图如:
修改teahcer.java和student.java类(为了简单起见吧Student也更改为使用Annotation的形式)
1 package com.model; 2 3 import javax.persistence.Column; 4 import javax.persistence.Entity; 5 import javax.persistence.GeneratedValue; 6 import javax.persistence.Id; 7 import javax.persistence.Table; 8 9 @Entity 10 @Table(name="teacher") 11 public class Teacher { 12 private int id; 13 private String name; 14 private int age; 15 private String title; 16 17 @Id 18 @GeneratedValue 19 public int getId() { 20 return id; 21 } 22 public void setId(int id) { 23 this.id = id; 24 } 25 public String getName() { 26 return name; 27 } 28 public void setName(String name) { 29 this.name = name; 30 } 31 public int getAge() { 32 return age; 33 } 34 public void setAge(int age) { 35 this.age = age; 36 } 37 public String getTitle() { 38 return title; 39 } 40 public void setTitle(String title) { 41 this.title = title; 42 } 43 }
接着删除数据库里的teahcer和student表,在hibernate.cfg.xml的配置文件里,有一条
1 <property name="hbm2ddl.auto">update</property>
参数为update时,会在第一次运行时检查是否有表结构,没有则自动生成。我让hibernate自动生成表,看看一对一单向关联的表结构是怎样的。
运行测试。
1 public class Main { 2 public static void main(String[] args) { 3 //通过util类创建sessionFactory 4 SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); 5 sessionFactory.close(); 6 } 7 }
三、结果展示
结果为在student表中出现了一个外键,依赖teacher的主键id,而teacher中并没有外键;
四、一对一双向外键关联
忽略关系图;
修改teacher.java,添加属性
private Student student; @OneToOne public Student getStudent() { return student; } public void setStudent(Student student) { this.student = student; }
删除表,并运行测试;
结果展示:
两张表都生成了一个外键,并依赖另一张表的主键id;
为了不创建两个外键(效果重复。。。),在其中一个@OneToOne上设置(mappedBy);
例如在student.java上设置;
@OneToOne(mappedBy="student")
mappedBy="student" 中student为teacher里的student属性;
测试运行后,结果只有teacher表中有外键,student表里没有;
PS:建议只要有双向关联,一定要设置mappedBy;
PSS:主键关联忽略,使用时现查现用;
----------------------------------------------------------------------------------------------------
此文为个人学习记录,如有参考转载,请注明出处 黑白熊的博客 http://www.cnblogs.com/xiong233/
hibernate学习四(关系映射一对一)