Hibernate基础之八:一对一单/双向,主/外键关联 @OneToOne@JoinColumn
2012-11-06 16:42
507 查看
1:一对一,单向,外键关联
Student和stusentIDCard两张表是一对一的关系,即一个学生只有一个学生证,一个学生证只对应一个学生Stuent表里有个外键要参考StudentIDCard
表现类上就是Student实例里聚合一个stusentIDCard
@Entity public class Student { private int id; private String name; private int age; private StudentIDCard cardId; @Id @GeneratedValue//可以定单独的自增序列,这共用一个 public int getId() { return id; } @OneToOne//一对一的关系 @JoinColumn(name="card_Id")//指定外键名称是card_Id public StudentIDCard getCardId() { return cardId; }
@Entity public class StudentIDCard { private int id; private String kinds; private Date datePublished; @Id @GeneratedValue//可以定义单独的自增序列,这里共用一个 public int getId() { return id; }
测试类
@Test public void testIN() { Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); StudentIDCard sic = new StudentIDCard(); sic.setKinds("primarySchool"); sic.setDatePublished(new Date()); session.save(sic); Student s = new Student(); s.setName("李四"); s.setAge(0); s.setCardId(sic); session.save(s); session.getTransaction().commit(); HibernateUtil.getSessionFactory().close(); }
@Test public void testShow() { new SchemaExport(new AnnotationConfiguration().configure()).create(false,true); }
建表结果:
foreign key (card_Id) references StudentIDCard16:15:13,184 DEBUG SchemaUpdate:226 - create table Student (id number(10,0) not null, age number(10,0) not null, name varchar2(255 char), card_Id number(10,0),primary
key (id))
16:15:13,193 DEBUG SchemaUpdate:226 - create table StudentIDCard (id number(10,0) not null, datePublished timestamp, kinds varchar2(255 char), primary key (id))
16:15:13,200 DEBUG SchemaUpdate:226 - alter table Student add constraint FKF3371A1BEA113360foreign key (card_Id)references StudentIDCard
PowerDesigner里反向工程出来的图如下:
![](http://img.my.csdn.net/uploads/201211/06/1352188872_2559.jpg)
就是Student表里的字段要去参考StudenIDCard表里的东西,外键名字我指定的是:“CARD_ID”
2:一对一,双向,外键关联
双向表现在类上就是:Student和stusentIDCard互相聚合一个实例,双方都标注@OneToOne
Student类不变,参考上边那个,不赘述了
@Entity public class StudentIDCard { private int id; private String kinds; private Date datePublished; private Student student; @Id @GeneratedValue public int getId() { return id; } @OneToOne//互相持有,都加了OneToOne public Student getStudent() { return student; }
![](http://img.my.csdn.net/uploads/201211/06/1352191432_1466.jpg)
但这样就等于会在表里出现重复的字段,还要设置mappedBy,说明对方是主导,消除冗余
StudentIDCard类的getStudent()上
@OneToOne(mappedBy="StudentIDCard")说明对方是主导,对方(Student)的"cardId"属性已经做映射了,消除互相是外键的冗余
getStudent()
@OneToOne(mappedBy="cardId")//说明对方是主导,对方(Student)的"cardId"属性已经做映射了,消除互相是外键的冗余 public Student getStudent() { return student; }
3:一对一,单向,主键关联
@JoinColumn换成@PrimaryKeyJoinColumn//指定外键名字@JoinColumn换成@PrimaryKeyJoinColumn//指定外键名字
相关文章推荐
- Hibernate基础:一对一单/双向,主/外键关联 @OneToOne@JoinColumn
- Hibernate主键一对一关联映射实例【xml和注解版本@OneToOne@JoinColumn(name="wifeId")--主键单向】(十二)
- 关于hibernate中双向外键关联one-to-one的property-ref=的问题(转)
- 关于hibernate中双向外键关联one-to-one的property-ref=的问题
- Hibernate基础之九:多对多,单/双向关联 @ManyToOne @OneToMany
- Hibernate Annotation @mappedBy含义在使用onetoone 时候【外键双向关联】(十三)
- Hibernate关系映射 一对一双向外键关联@OneToOne Annotation方式
- 关于hibernate中双向外键关联one-to-one的property-ref=的问题
- Hibernate关系映射 一对一双向外键关联@OneToOne Annotation方式 双向关联和单向关联的区别
- 关于hibernate中双向外键关联one-to-one的property-ref=的问题
- Hibernate关系映射(二)一对一双向外键关联@OneToOne Annotation方式
- Hibernate基础之九:多对多,单/双向关联 @ManyToOne @OneToMany
- Hibernate之one-to-one外键关联映射
- Hibernate之一对多单向外键关联(OneToMany)
- hibernate JPA @OneToOne双向关联共享主键
- 码农小汪-Hibernate学习9-hibernate双向关联关系注解表示@OneToMany mappedBy @ManyToMany @JoinTable
- hibernate学习5之one-to-many双向关联
- hibernate3 one-to-one总结之主外键关联
- hibernate 一对多(one-to-many)双向关联
- 【SSH快速进阶】——Hibernate一对一映射(one-to-one)——唯一外键关联