埋め込み可能クラス

埋め込み可能クラスは、エンティティクラス のプロパティをグループ化します。

埋め込み可能クラスの定義

次のコードスニペットは、埋め込み可能クラスを定義する方法を示しています。

@Embeddable
public class Address {

    final String city;

    final String street;

    @Column(name = "ZIP_CODE")
    final String zip;

    public Address(String city, String street, String zip) {
        this.city = city;
        this.street = street;
        this.zip = zip;
    }
}

埋め込み可能クラスはエンティティフィールドの型として使用されます。

@Entity
public class Employee {
    @Id
    Integer id;

    Address address;
}

上記のエンティティ定義は、次のエンティティ定義と同等です。

@Entity
public class Employee {
    @Id
    Integer id;

    String city;

    String street;

    @Column(name = "ZIP_CODE")
    String zip;
}

注釈

Java 14 以降のバージョンでは、records@Embeddable アノテーションを付けることができます。

@Embeddable
public record Address(
  String city,
  String street,
  @Column(name = "ZIP_CODE")String zip) {
}

命名規則

命名規則は、埋め込み可能クラスを利用している エンティティクラス から継承されます。

フィールドの定義

デフォルトでは、フィールドは永続的で、データベースまたは結果セットのカラムに対応します。

フィールドの型は次のいずれかである必要があります。

@Embeddable
public class Address {
    ...
    String street;
}

カラム

カラム名を @Column アノテーションで指定できます。

@Column(name = "ZIP_CODE")
final String zip;

Transient

埋め込み可能オブジェクトに永続化したくないフィールドがある場合は、 @Transient アノテーションを指定できます。

メソッドの定義

メソッドの使用に制限はありません。

Employee employee = new Employee(); // Entity
Address address = new Address("Tokyo", "Yaesu", "103-0028"); // Embeddable
employee.setAddress(address);