组合主键映射
语法:
1.将主件类注解为@Embeddable,并将主键的属性注解为@Id
2.将主件的属性注解为@EmbeddedId
3.将类注解为@IdClass,并将该实体中所有属于主键的属性都注解为@Id
1
//主键类
package com.woxiaoe.study.hibernate;
import java.io.Serializable;
@Embeddable
public class StudentCard implements Serializable {
private int idCard;
private int classNo;
public int getIdCard() {
return idCard;
}
public void setIdCard(int idCard) {
this.idCard = idCard;
}
public int getClassNo() {
return classNo;
}
public void setClassNo(int classNo) {
this.classNo = classNo;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + classNo;
result = prime * result + idCard;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
StudentCard other = (StudentCard) obj;
if (classNo != other.classNo)
return false;
if (idCard != other.idCard)
return false;
return true;
}
}
//实体类
package com.woxiaoe.study.hibernate;
import java.math.BigInteger;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import org.hibernate.annotations.GenericGenerator;
@Entity
public class Student {
private BigInteger id;
private int age;
private String name;
private StudentCard studentCard;
public BigInteger getId() {
return id;
}
public void setId(BigInteger id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Id//j将主键类注解为@Id
public StudentCard getStudentCard() {
return studentCard;
}
public void setStudentCard(StudentCard studentCard) {
this.studentCard = studentCard;
}
}
2.去掉组件类的@Embeddable注解,在实体类中将其注解为@EmbeddedId
3.将类注解为@IdClass,并将该实体中所有属于主键的属性都注解为@Id