Hibernate联合主键关联(Annotation配置)

Hibernate联合主键关联(Annotation配置)_第1张图片

package edu.xaut.hibernate;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.OneToOne;

@Entity
public class Student {

 
  private int id;
   private String name;
   private String gender;
   private StuIdCard stuIdCard;
   private int age;

   @Id
   @GeneratedValue
   public int getId() {
      return id;
   }

   @Column(name = "name", length = 20)
   public String getName() {
      return name;
   }

   @Column(name = "gender", length = 6)
   public String getGender() {
      return gender;
   }

   @OneToOne
   @JoinColumns( {
         @JoinColumn(name = "StuIdCardId", referencedColumnName = "id"),
         @JoinColumn(name = "StuIdCardNum", referencedColumnName = "num") })
   public StuIdCard getStuIdCard() {
      return stuIdCard;
   }

   public int getAge() {
      return age;
   }

   public void setAge(int age) {
      this.age = age;
   }

   public void setGender(String gender) {
      this.gender = gender;
   }

   public void setId(int id) {
      this.id = id;
   }

   public void setName(String name) {
      this.name = name;
   }

   public void setStuIdCard(StuIdCard stuIdCard) {
      this.stuIdCard = stuIdCard;
   }
}

package edu.xaut.hibernate;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.OneToOne;

@Entity
@IdClass(StuIdCardPk.class)
public class StuIdCard {
   private int id;
   private String num;
   private String color;
   private Student student;

   @Column(length = 10)
   public String getColor() {
      return color;
   }

   @Id
   public int getId() {
      return id;
   }

   @Id
   @Column(length = 20)
   public String getNum() {
      return num;
   }

   @OneToOne(mappedBy = "stuIdCard")
   public Student getStudent() {
      return student;
   }

   public void setColor(String color) {
      this.color = color;
   }

   public void setId(int id) {
      this.id = id;
   }

   public void setNum(String num) {
      this.num = num;
   }

   public void setStudent(Student student) {
      this.student = student;
   }
}

package edu.xaut.hibernate;

import java.io.Serializable;

import javax.persistence.Column;

public class StuIdCardPk implements Serializable {
   private int id;
   private String num;

   public int getId() {
      return id;
   }

   @Column(length = 20)
   public String getNum() {
      return num;
   }

   public void setId(int id) {
      this.id = id;
   }

   public void setNum(String num) {
      this.num = num;
   }

   @Override
   public boolean equals(Object obj) {
      if (obj instanceof StuIdCardPk) {
         StuIdCardPk stuIdCard = (StuIdCardPk) obj;
         if (this.id == stuIdCard.id && this.num.equals(stuIdCard.num))
            return true;
      }
      return false;
   }

   @Override
   public int hashCode() {
      return this.num.hashCode();
   }
}

生成的SQL语句如下:
create table StuIdCard (
       id integer not null,
       num varchar(20) not null,
       color varchar(10),
       primary key (id, num)
   )

   create table Student (
       id integer not null auto_increment,
       age integer not null,
       gender varchar(6),
       name varchar(20),
       StuIdCardId integer,
       StuIdCardNum varchar(20),
       primary key (id)
   )

   alter table Student
       add index FKF3371A1BDF1F5376 (StuIdCardId, StuIdCardNum),
       add constraint FKF3371A1BDF1F5376
       foreign key (StuIdCardId, StuIdCardNum)
       references StuIdCard (id, num)

你可能感兴趣的:(Hibernate联合主键关联(Annotation配置))