主键类:定义为@Embeddable
@Embeddable
public class F implements Serializable{//序列化 并且最好override equals() and hashCode()
private int id;
private int id2;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getId2() {
return id2;
}
public void setId2(int id2) {
this.id2 = id2;
}
}
持久化类:
@Entity
@Table(name="E_USER",uniqueConstraints={
@UniqueConstraint(columnNames={"yahoo"})
})
@IdClass(F.class)//将F作为主键类
public class User {
private int id;
private int id2;
//id id2必须和F中的属性一致
private String yahoo;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
public int getId2() {
return id2;
}
public void setId2(int id2) {
this.id2 = id2;
}
public String getYahoo() {
return yahoo;
}
public void setYahoo(String yahoo) {
this.yahoo = yahoo;
}
}
或者了一种方法:
使用@EmbeddedId F f;
最终生成sql:(mysql)
create table E_USER (id integer not null, id2 integer not null, yahoo varchar(255), primary key (id, id2), unique (yahoo))