创建User类:
@Entity
public class User {
private UserPK pk;
private int age;
private String sex;
private Date birthday;
private String address;
private String info;
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 Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
@Id //这里将注解改成@EmbeddedId可以将主键类中的@Embeddable注解移除
public UserPK getPk() {
return pk;
}
public void setPk(UserPK pk) {
this.pk = pk;
}
}
创建主键类:
@Embeddable
public class UserPK implements Serializable{
private int id;
private String name;
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;
}
@Override
public int hashCode() {
return this.getName().hashCode();
}
@Override
public boolean equals(Object obj) {
UserPK other = (UserPK)obj;
if (other.getId() == this.getId() && other.getName().equals(this.getName())){
return true;
}
return false;
}
}
注意添加的注解:
@Embeddable
这里创建的表结构如下:
+----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(255) | NO | PRI | NULL | |
| address | varchar(255) | YES | | NULL | |
| age | int(11) | NO | | NULL | |
| birthday | datetime | YES | | NULL | |
| info | varchar(255) | YES | | NULL | |
| sex | varchar(255) | YES | | NULL | |
+----------+--------------+------+-----+---------+-------+
另一种方式:
@Entity
@IdClass(UserPK.class)
public class User {
private int id;
private String name;
private int age;
private String sex;
private Date birthday;
private String address;
private String info;
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 Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
@Id
public int getId(){
return id;
}
public void setId(int id){
this.id = id;
}
@Id
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
}
这里去除UserPK中的注释即可。