本教程每节课都附带源码,强烈大家建议配合源码学习。
本节源码: 点击打开链接
一对一单向主键关联(不重要)(使用Annotation无外键关联,使用xml后发现两表使用相同主键)
实现方式有两种:
Annotation方式:
@primaryKeyJoinColumn
注:此方式有些小Bug,系统不会自动向表里写入外键关联!
XML方式:
<one-to-one id 使用 foreign class
项目源码:
Husband.java
package com.bjsxt.hibernate;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
@Entity
public class Husband {
private int id;
private String name;
private Wife wife;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@OneToOne
@PrimaryKeyJoinColumn
public Wife getWife() {
return wife;
}
public void setWife(Wife wife) {
this.wife = wife;
}
}
Wife.java
package com.bjsxt.hibernate;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
@Entity
public class Wife {
private int id;
private String name;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Student.java
package com.bjsxt.hibernate;
public class Student {
private int id;
private String name;
private int age;
private String sex;
private boolean good;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public boolean isGood() {
return good;
}
public void setGood(boolean good) {
this.good = good;
}
}
StuIdCard.java
package com.bjsxt.hibernate;
public class StuIdCard {
private int id;
private String num;
private Student student;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
}
测试脚本:
package com.bjsxt.hiberante;
import java.util.Date;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.hibernate.Session;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import com.bjsxt.hibernate.Husband;
import com.bjsxt.hibernate.StuIdCard;
import com.bjsxt.hibernate.Student;
import com.bjsxt.hibernate.Wife;
public class HibernateQLTest {
private static SessionFactory sf;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
System.out.println("BeforeClass");
sf = new AnnotationConfiguration().configure().buildSessionFactory();
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
System.out.println("AfterClass");
sf.close();
}
//
@Test
public void testSchemaExport(){
new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
}
@Test
public void testOneTOOne_Wife(){
Session session = sf.getCurrentSession();
session.beginTransaction();
Wife wife = new Wife();
wife.setName("wife");
Husband husband = new Husband();
husband.setName("husband");
husband.setWife(wife);
session.save(wife); //先保存妻子
session.save(husband); //再保存丈夫
session.getTransaction().commit();
}
@Test
public void testOneToOne_Stu(){
Session session = sf.getCurrentSession();
session.beginTransaction();
Student stu = new Student();
stu.setName("student");
stu.setAge(20);
stu.setGood(false);
stu.setSex("man");
StuIdCard idcard = new StuIdCard();
idcard.setStudent(stu);
idcard.setNum("什马卡?");
session.save(stu);
session.save(idcard);
session.getTransaction().commit();
}
public static void main(String args[]){
sf = new AnnotationConfiguration().configure().buildSessionFactory();
Session session = sf.getCurrentSession();
session.beginTransaction();
Student stu = new Student();
stu.setName("student");
stu.setAge(20);
stu.setGood(false);
stu.setSex("man");
StuIdCard idcard = new StuIdCard();
idcard.setStudent(stu);
idcard.setNum("什马卡?");
session.save(stu);
session.save(idcard);
session.getTransaction().commit();
sf.close();
}
}