Hibernate 一对一 双向 主键关联
StudentBasic.class
package com.tian.test.entity;
import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.JoinColumn;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@Entity(name = "StudentBasic")
@Table(name = "studentBasick")
public class StudentBasic {
//private static final long serialVersionUID = 691350277643811847L;
@Id
@GeneratedValue
@Column(name = "studentId")
private Integer studentId;
@Column(length = 10)
private String studentName;
@Column(length = 10)
private String sex;
@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
private StudentDetail studentDetail;
public StudentBasic() {
}
public Integer getStudentId() {
return studentId;
}
public void setStudentId(Integer studentId) {
this.studentId = studentId;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public StudentDetail getStudentDetail() {
return studentDetail;
}
public void setStudentDetail(StudentDetail studentDetail) {
this.studentDetail = studentDetail;
}
}
StudentDetail.Class
package com.tian.test.entity;
import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.GenerationType;
import javax.persistence.JoinColumn;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;
@Entity(name = "StudentDetail")
@Table(name = "studentDetailk")
public class StudentDetail {
//private static final long serialVersionUID = 2038888147029653370L;
@Id
@GeneratedValue(generator = "pkGenerator")
@GenericGenerator(name = "pkGenerator",strategy = "foreign",parameters = { @Parameter(name = "property", value = "basic") })
//@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer studentId;
@Column(length = 50)
private String homeAddress;
@Column(length = 100)
private String homePhoneNumber;
@OneToOne(cascade = CascadeType.ALL,mappedBy="studentDetail")
//@PrimaryKeyJoinColumn
private StudentBasic basic;
public StudentDetail() {
}
public String getHomeAddress() {
return homeAddress;
}
public void setHomeAddress(String homeAddress) {
this.homeAddress = homeAddress;
}
public String getHomePhoneNumber() {
return homePhoneNumber;
}
public void setHomePhoneNumber(String homePhomeNumber) {
this.homePhoneNumber = homePhomeNumber;
}
public StudentBasic getBasic() {
return basic;
}
public void setBasic(StudentBasic basic) {
this.basic = basic;
}
public void setStudentId(Integer studentId) {
this.studentId = studentId;
}
public Integer getStudentId() {
return studentId;
}
}
Test.class
package com.tian.test.hibrenate;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;
import org.junit.Test;
import com.tian.test.entity.StudentBasic;
import com.tian.test.entity.StudentDetail;
public class testOToO {
public static SessionFactory sf;
static{
sf=new AnnotationConfiguration().configure().buildSessionFactory();
}
@Test
public void test(){
save();
//dede();
}
public void save() {
Session session = sf.openSession();
Transaction tx = session.beginTransaction();
try {
StudentBasic basic = new StudentBasic();
basic.setStudentName("mmmd");
basic.setSex("男");
StudentDetail detail = new StudentDetail();
detail.setHomeAddress("dsfs");
detail.setHomePhoneNumber("0756-5512425");
basic.setStudentDetail(detail);
detail.setBasic(basic);
//session.save(detail);
session.save(basic);
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
}
session.close();
}
//@Test
public void dede(){
Session session=sf.openSession();
Transaction tx = session.beginTransaction();
StudentBasic stuBas=(StudentBasic) session.get(StudentBasic.class, 4);
session.delete(stuBas);
//StudentDetail stuDel=new StudentDetail();
//stuDel=(StudentDetail) session.get(StudentDetail.class, 3);
//session.delete(stuDel);
session.delete(stuBas);
tx.commit();
}
public static void list() {
Session session = sf.openSession();
StudentDetail detail = (StudentDetail) session.createQuery(
"select b from StudentDetail b").iterate().next();
List list=session.createQuery("select b from StudentBasic b").list();
System.out.println(list.size());
session.close();
}
/*
public static void main(String[] args) {
list();
}
*/
}