32

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 の各列に追加するプレフィックスのみを指定することは可能ですか?

ありがとう、

ザビエル

4

2 に答える 2

12

Embedded複数の同じクラスを使用したい場合。@AttributeOverrides すべての列に対して行う必要があります。以下のようにしてみてください。

リファレンスJPA 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;  

}   

に 1 つ以上のEmbedded値がある場合、私の提案Entityです。使ってみてください@CollectionTable

@CollectionTable(name = "EMPLOYEE_ADDRESS", joinColumns = @JoinColumn(name = "ADDRESS_ID"))
private List<Address> addressList;

リファレンスJPA CollectionTable

于 2012-10-16T10:15:19.807 に答える