您的位置:首页 > 其它

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

2013-03-06 00:00 387 查看




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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: