スプリングスプリングSpring-@Embedded@Embeddable@ElementCollection差異


1. @Embedded @Embeddable
@Entity
@Getter
@Setter
public class Member {
    @Id
    @GeneratedValue
    @Column(name = "member_id")
    private Long id;
    private String username;
    private int age;



    private String zipcode;
    private String address;
    private String subAddress;
}
単純なメンバーエンティティが作成されました.次の3つのフィールドはメンバーのアドレスです.
このようにして、実装時に発生する問題は、フィールドを追加すると乱雑になり、読み取り可能性が低下する.
3つのアドレスフィールドをAddressというクラスに組み合わせるとどうなりますか?
@Embeddable
public class Address {
    private String zipcode;
    private String address;
    private String subAddress;
}
Addressクラスに@Embeddable宣言を追加
@Entity
@Getter
@Setter
public class Member {
    @Id
    @GeneratedValue
    @Column(name = "member_id")
    private Long id;
    private String username;
    private int age;



//    private String zipcode;
//    private String address;
//    private String subAddress;
    @Embedded
    private Address address;
}
既存のエンティティオブジェクトにバインドするフィールドに@Embedded宣言を追加

2.@AttributeOverride
クラスを@Embedded形式で取得する場合は、複数回希望する場合があります.
しかし、これは重複するコラム名を招きます.この場合、@AttributeOverrideを使用してカラム名をカスタマイズできます.
// 중복 테스트
@Entity
@Getter
@Setter
public class Member {
    @Id
    @GeneratedValue
    @Column(name = "member_id")
    private Long id;
    private String username;
    private int age;


    @Embedded
    private Address address;
    
    @Embedded
    private Address parentAddress;
}

同じ埋め込み宣言を使用して重複するカラムエラーを生成
// 컬럼 네임 커스텀 
@Entity
@Getter
@Setter
public class Member {
    @Id
    @GeneratedValue
    @Column(name = "member_id")
    private Long id;
    private String username;
    private int age;


    @Embedded
    @AttributeOverride(name = "zipCode", column = @Column(name = "MY_ZIP_CODE"))
    @AttributeOverride(name = "address", column = @Column(name = "MY_ADDRESS"))
    @AttributeOverride(name = "subAddress", column = @Column(name = "MY_SUB_ADDRESS"))
    private Address address;

    @Embedded
    @AttributeOverride(name = "zipCode", column = @Column(name = "PARENT_ZIP_CODE"))
    @AttributeOverride(name = "address", column = @Column(name = "PARENT_ADDRESS"))
    @AttributeOverride(name = "subAddress", column = @Column(name = "PARENT_SUB_ADDRESS"))
    private Address parentAddress;
}

3. @ElementCollection
@Embeddedの色がCollectionだったらどうしますか?

imbeddyタイプはコンテナになるべきではないという.
@Entity
@Getter
@Setter
public class Member {
    @Id
    @GeneratedValue
    @Column(name = "member_id")
    private Long id;
    private String username;
    private int age;


    @ElementCollection
    private List<Address> addresses;

}
@ElementCollectionはマッピングできます.「コレクション」(Collection)列は「メンバー」(Member)テーブルに追加されません.
新しいテーブルの作成が完了しました.