嵌入式主键@EmbeddedId

用于定义复合主键

[b][color=red]方法1:[/color][/b]

(1)编写一个嵌入式主键的类testPK

作为嵌入式主键类,要满足以下几点要求。

1.必须实现Serializable接口、必须有默认的public无参数的构造方法、必须覆盖equals 和hashCode方法,这些要求与使用复合主键的要求相同。

2.将嵌入式主键类使用@Embeddable标注,表示这个是一个嵌入式类。

@Embeddable
public class TestPK {
private String firstName;

private String lastName;

public TestPK() {
}

public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

public String getLastName() {
return lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}

@Override
public boolean equals(Object o) {
testPK other = (testPK) obj;
EqualsBuilder builder = new EqualsBuilder();
builder.append(firstName, other.firstName).append(lastName,other.lastName);
boolean equals = builder.isEquals();
return equals;
}

@Override
public int hashCode() {
HashCodeBuilder builder = new HashCodeBuilder();
builder.append(firstName).append(lastName);
int code = builder.hashCode();
return code;
}
}

(2)通过@EmbeddedId注释标注实体中的嵌入式主键

注意:
1.必须要实现serializable接口

2.需要有无参的构造函数

3.@Embeddable注释,表示此类可以被插入某个entity中

4.两个class和Column的列名都必需与表里的列名一致,建立sql时,会自动选择TestPK里的列名

@Entity
@Table(name = "schemaname.tablename")
public class Test {
@EmbeddedId
private TestPK id;

private String name;

public Test() {
}

public int getId() {
return id.getId();
}

@Column(name = "firstname")
public String getFirstName(){
return id.getFirstName()
}

@Column(name = "lastname")
public String getLastName(){
return id.getLastName()
}

@Column(name = "name")
public String getName() {
return name;
}

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

[b][color=red]方法2:[/color][/b]

(3)不想在TestPK中定义列名,可以用以下方法,用于公共复合主键
通过@AttributeOverride注释来指定Test类的firstName,lastName与数据库中表的first_name,last_name进行映射.
以下代码在class Test
@EmbeddedId
@AttributeOverrides( {
@AttributeOverride(name = firstName, column = @Column(name = first_name)),
@AttributeOverride(name = lastName, column = @Column(name = last_name)) })

不需要getFirstName,getLastName
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值