埋め込み可能クラス

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

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

埋め込み可能クラスを定義する方法を示します:

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

クラスとレコードの両方に @Embeddable アノテーションを適用できます。

@Embeddable
public record Address(
  String city,
  String street,
  @Column(name = "ZIP_CODE")String 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;
}

命名規則

命名規則は、囲んでいるエンティティクラスから継承されます。

フィールドの定義

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

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

@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);