嵌入式主鍵@EmbeddedId

用於定義複合主鍵

方法1:

(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;
  }
}

方法2:

(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,getLastNamesql

相關文章
相關標籤/搜索