SpringData JPA複合キーの使用
複合プライマリ・キーと連合プライマリ・キーの違い
複合プライマリ・キー:1つのテーブルで、2つのフィールドが一意のデータを決定します.
連合主キー:表A、表Bの2枚の表、中間表を通じて、2枚の表の対応関係を確定する.(中間表の3つのフィールド:id,表A_id,表B_id);このとき、中間テーブルのidを連合プライマリキーと呼ぶ.
Spring jpa複合プライマリキーの使用
使用シーン:オーダークラス、オーダー番号ORDER_NUM+受注サブ品目INNER_NUMは、2つのフィールドが複合プライマリ・キーを構成し、一意のデータを決定します.方式一:@Embeddableを使用してプライマリ・キー・クラスを注釈する.次に、エンティティクラスは自主キークラスを継承します. 1 . 複合プライマリ・キー・クラスを作成します.ネーミングは、エンティティクラス名の後+PKでプライマリ・キー・クラスを区別できます.
2 . エンティティ・クラスを作成し、プライマリ・キー・クラスを継承します.方式2:@IdClassを用いて複合プライマリ・キーを注釈する;(推奨、複合主キーフィールド、実体クラスにおいて、直接体現され、簡単明瞭に見える)1.複合プライマリ・キー・クラスを作成します.
2 . エンティティークラスの作成
複合プライマリ・キー:1つのテーブルで、2つのフィールドが一意のデータを決定します.
連合主キー:表A、表Bの2枚の表、中間表を通じて、2枚の表の対応関係を確定する.(中間表の3つのフィールド:id,表A_id,表B_id);このとき、中間テーブルのidを連合プライマリキーと呼ぶ.
Spring jpa複合プライマリキーの使用
使用シーン:オーダークラス、オーダー番号ORDER_NUM+受注サブ品目INNER_NUMは、2つのフィールドが複合プライマリ・キーを構成し、一意のデータを決定します.
@Embeddable // 1. , @Embeddable
public class OrderPK implements Serializable { // 2. Serializable ( );
@Column(name = "ORDER_NUM")
private String orderNum; //
@Column(name = "INNER_NUM")
private String innerNum; //
// 3.
// public ( , , )
// , ,
// 4. equals hashCode 。
// equals ,EntityManger find Entity ,
// equals 。
// hashCode
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof OrderPK)) return false;
OrderPK orderPK = (OrderPK) o;
if (orderNum != null ? !orderNum.equals(orderPK.orderNum) : orderPK.orderNum != null) return false;
return innerNum != null ? innerNum.equals(orderPK.innerNum) : orderPK.innerNum == null;
}
@Override
public int hashCode() {
int result = orderNum != null ? orderNum.hashCode() : 0;
result = 31 * result + (innerNum != null ? innerNum.hashCode() : 0);
return result;
}
// get set toString
}
2 . エンティティ・クラスを作成し、プライマリ・キー・クラスを継承します.
@Entity
@Table(name = "ORDER")
public class Order extends OrderPK {
//
@EmbeddedId
private OrderPK id;
// , ,
@Column(name = "OTHER_FIELD")
private String otherField; //
// get set toString
}
// @Embeddable
public class OrderPK implements Serializable {
// @Column(name = "ORDER_NUM")
private String orderNum; //
// @Column(name = "INNER_NUM")
private String innerNum; //
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof OrderPK)) return false;
OrderPK orderPK = (OrderPK) o;
if (orderNum != null ? !orderNum.equals(orderPK.orderNum) : orderPK.orderNum != null) return false;
return innerNum != null ? innerNum.equals(orderPK.innerNum) : orderPK.innerNum == null;
}
@Override
public int hashCode() {
int result = orderNum != null ? orderNum.hashCode() : 0;
result = 31 * result + (innerNum != null ? innerNum.hashCode() : 0);
return result;
}
// get set toString
}
2 . エンティティークラスの作成
@Entity
@Table(name = "ORDER")
@IdClass(OrderPK.class) // @IdClass ,
public class Order implements Serializable { //
// @EmbeddedId
// private OrderPK id;
@Id //
@Column(name = "ORDER_NUM")
private String orderNum; //
@Id //
@Column(name = "INNER_NUM")
private String innerNum; //
@Column(name = "OTHER_FIELD")
private String otherField; //
// get set toString
}