1. ホーム
  2. java

[解決済み] JPA 複数の埋め込みフィールド

2023-06-27 21:05:15

質問

JPAエンティティクラスに、2つの埋め込み型( @Embedded ) フィールドを含むことはできますか? 例としては、以下のようになります。

@Entity
public class Person {
    @Embedded
    public Address home;

    @Embedded
    public Address work;
}

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

この場合 Person には二つの Address インスタンスを含むことができます。私はHibernateの実装でJPAを使用しています。Hibernate Toolsを使用してスキーマを生成すると、スキーマに埋め込まれた1つの Address . 私が望むのは、2つの埋め込み Address インスタンスで、それぞれカラム名が区別されているか、何らかの接頭辞 (home や work など) がつけられているものです。私が知っているのは @AttributeOverrides も知っていますが、これは各属性を個別にオーバーライドする必要があります。これは、もし埋め込みオブジェクト ( Address ) が大きくなると、各カラムを個別にオーバーライドする必要があるため、面倒になります。

どのように解決するのか?

同じエンティティに同じ埋め込みオブジェクト型を2回持ちたい場合、列名のデフォルトは機能しません。少なくとも1つの列は明示的に指定する必要があります。HibernateはEJB3の仕様を超えて、NamingStrategy.DefaultComponentSafeNewを使用してデフォルトのメカニズムを拡張することができます。DefaultComponentSafeNamingStrategyは、デフォルトのEJB3NamingStrategyに対する小さな改良で、埋め込みオブジェクトが同じエンティティで2回使用されてもデフォルトにできるようにします。

Hibernate Annotations Docより。 http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#d0e714