JPAアノテーションを使用して、次のような同じ埋め込みオブジェクトを再利用したいと思います。
@Entity
public class User {
@Embedded
public Address homeAddress;
@Embedded
public Address workAddress;
}
@Embeddable
public class Address {
public String code;
public String city;
...
}
@ AttributeOverrides、@ AttributeOverride、@ ColumnでSQL列名を指定できますが、それは動詞です。 homeAddressとworkAddressの各列に追加するプレフィックスだけを指定することは可能ですか?
ありがとう、
ザビエル
複数の同じEmbedded
クラスを使用したい場合。すべての列に対して@AttributeOverrides
を実行する必要があります。以下のようにしてみてください。
@Embeddable
public class Address {
private String state;
@Column(name = "Zip_code")
private String Zip;
}
@Entity(name = "Employee")
public class Employee implements Serializable {
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "state", column = @Column(name = "province_1")),
@AttributeOverride(name = "Zip", column = @Column(name = "postal_code_2"))
})
private Address address_1;
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "state", column = @Column(name = "province_2")),
@AttributeOverride(name = "Zip", column = @Column(name = "postal_code_2"))
})
private Address address_2;
}
Embedded
に1つ以上のEntity
値がある場合の私の提案。 @CollectionTable
を使用してみてください。
@CollectionTable(name = "EMPLOYEE_ADDRESS", joinColumns = @JoinColumn(name = "ADDRESS_ID"))
private List<Address> addressList;
同じ問題があります、ここに解決策があります。完璧に機能し、フィールド名の前に埋め込みプロパティの名前(この場合はhomeAddress_とworkAddress_)を付けます
これを追加するとうまくいきます(ただし、JPAプロバイダーとしてhibernateを使用しています)
<property name="hibernate.implicit_naming_strategy" value="org.hibernate.boot.model.naming.ImplicitNamingStrategyComponentPathImpl" />