联合主键的使用

来源:互联网 发布:ip端口绑定域名 编辑:程序博客网 时间:2024/05/01 00:10

在建数据库表的时候,有时候会用对象的多个属性来作为主键,这就是联合主键。

联合主键的使用:先把实体类建好,然后把作为主键的属性写到一个class中作为联合主键类

在写联合主键类时,联合主键类必须实现serializable接口,而且联合主键类必须重写equals()方法和hashCode()方法,这样做的目的是为了确保唯一性。

在实体类中用注解把相应的ID和其他一些属性设置好。

Example:

建一个Wife类:

@Entity
@IdClass(WifePK.class)   //联合主键的属性所在的类
public class Wife {
private int id;
private String name;
private int age;

public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Id //要作为联合主键的属性
public int getId() {
return id;
}
@Id //要作为联合主键的属性
public String getName() {
return name;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
}



联合主键类:

public class WifePK implement serializable {//主键类必须实现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;
}

//联合主键类必须重写equals()方法和hashCode()方法

@Override
public boolean equals( Object o){
if ( o instanceof WifePK){
WifePK pk =(WifePK)o;
if(this.id==pk.getId()&& this.name.equals(pk.getName()))
return true;
}
return false;
}

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



建立一个Husband类,并设置表的关系:

@Entity
public class Husband {
private int id;
private String name;
private Wife wife;//这是一个引用,用来连接Husband与Wife之间的对应


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


public String getName() {
return name;
}


@OneToOne //可以默认  也可以自己设置名字
@JoinColumns(
{
@JoinColumn(name="wifeId",referencedColumnName="id"),//自己设定外键名字

@JoinColumn(name="wifeName",referencedColumnName="name")

}
)
public Wife getWife() {
return wife;
}


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


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


public void setWife(Wife wife) {
this.wife = wife;
}
}

原创粉丝点击