注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。
接下来我们讲解一下一对一的注解配置:
上一篇文档已经详细解说了各个注解的含义和作用,在这里就不详细说明了,直接使用了。
1.创建两个实体类(Student类和IdCard类)
Student类
package cn.onetoone.entity; import javax.persistence.*; /** * Created by accp on 2017/2/8. */ @Entity @Table(name = "Student") public class Student { @Id @GeneratedValue private Integer sid; @Column private String sname; @OneToOne(cascade = {CascadeType.ALL}) @JoinColumn(name = "cid") private IdCard idCard; public Integer getSid() { return sid; } public void setSid(Integer sid) { this.sid = sid; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } public IdCard getIdCard() { return idCard; } public void setIdCard(IdCard idCard) { this.idCard = idCard; } }
IdCard类:
package cn.onetoone.entity; import javax.persistence.*; /** * Created by accp on 2017/2/8. */ @Entity @Table public class IdCard { @Id @GeneratedValue private Integer cid; @Column private String cname; @OneToOne(mappedBy = "idCard") //把维护权交给Student private Student stu; public Integer getCid() { return cid; } public void setCid(Integer cid) { this.cid = cid; } public String getCname() { return cname; } public void setCname(String cname) { this.cname = cname; } public Student getStu() { return stu; } public void setStu(Student stu) { this.stu = stu; } }
2.在大配置中需要添加:
<mapping class="cn.onetoone.entity.Student"/> <mapping class="cn.onetoone.entity.IdCard"/>
3.测试类:
package cn.onetoone.test; import cn.onetoone.entity.IdCard; import cn.onetoone.entity.Student; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.After; import org.junit.Before; import org.junit.Test; /** * Created by accp on 2017/2/8. */ public class OneToOneTest { Configuration cfg; Session session; Transaction tx; @Before public void mybefore(){ cfg=new Configuration().configure(); SessionFactory factory=cfg.buildSessionFactory(); session=factory.openSession(); tx=session.beginTransaction(); } @After public void myafter(){ tx.commit(); session.close(); } @Test public void add(){ Student stu=new Student(); stu.setSname("李四"); IdCard idCard=new IdCard(); idCard.setCid(1234566789); idCard.setCname("身份证"); stu.setIdCard(idCard); session.save(idCard); session.save(stu); } }
生成的sql:
Hibernate: insert into IdCard (cname, cid) values (?, ?) Hibernate: insert into Student (cid, sname, sid) values (?, ?, ?)
数据库数据:
Student表 IdCard表