2012-10-16 8 views
18

Z annoations WZP, chcę ponownie użyć tego samego obiektu osadzonego tak:JPA Wiele osadzonych pól z prefiksem?

@Entity 
public class User { 
    @Embedded 
    public Address homeAddress; 

    @Embedded 
    public Address workAddress; 
} 

@Embeddable 
public class Address { 
    public String code; 
    public String city; 
    ... 
} 

mogę podać nazwy kolumn SQL z @AttributeOverrides, @AttributeOverride i @Column, ale to Verbos. Czy jest możliwe określenie tylko przedrostka do dodania do każdej kolumny dla adresu homeAddress i workAddress?

Dzięki,

Xavier

+0

możliwym duplikatu [WZP wielu dziedzinach wbudowanych] (http://stackoverflow.com/questions/331744/ jpa-multiple-embedded-fields) –

Odpowiedz

8

Jeśli chcesz korzystać z wielu tego samego Embedded klasie. Musisz zrobić @AttributeOverrides dla wszystkich kolumn. Spróbuj jak poniżej;

referencyjny 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; 

} 

Moja sugestia, jeśli istnieje jeden lub więcej Embedded wartość w Entity. Spróbuj użyć @CollectionTable.

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

referencyjny JPA CollectionTable

+9

Dzięki, znam to rozwiązanie, ale jest ono pełne. Czy istnieje jakieś rozwiązanie, które byłoby mniej szczegółowe, jak na przykład użycie "przedrostka" lub "sufiksu" ("_1" lub "_2" w twoim przykładzie)? – xnopre

+0

Dla każdego użytkownika Groovy próbującego powyższego i otrzymania błędu kompilacji, rozwiązaniem jest zastąpienie {} przez [] wewnątrz adnotacji @AttributesOverrides. – pokkie

Powiązane problemy