2012-10-16 16 views
18

Con annoations JPA, voglio riutilizzare lo stesso oggetto incorporato in questo modo:JPA Campi multipli con prefisso?

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

    @Embedded 
    public Address workAddress; 
} 

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

posso specificare i nomi delle colonne SQL con @AttributeOverrides, @AttributeOverride e @Column, ma è verbos. È possibile specificare solo un prefisso da aggiungere a ogni colonna per homeAddress e workAddress?

Grazie,

Xavier

+0

possibile duplicato del [JPA più campi incorporati] (http://stackoverflow.com/questions/331744/ jpa-multiple-embedded-fields) –

risposta

8

Se si desidera utilizzare più lo stesso Embedded classe. Devi fare @AttributeOverrides per tutte le colonne. Prova come sotto;

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

} 

Il mio suggerimento, se ci sono uno o più Embedded valore nella vostra Entity. Prova a usare @CollectionTable.

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

Riferimento JPA CollectionTable

+9

Grazie, conosco questa soluzione, ma è prolissa. C'è qualche soluzione per essere meno prolissa, come usare qualcosa come "prefisso" o "suffisso" ("_1" o "_2" nell'esempio)? – xnopre

+0

Per gli utenti di Groovy che provano quanto sopra e ottengono un errore di compilazione, la soluzione è sostituire il {} con [] all'interno dell'annotazione @AttributesOverrides. – pokkie

3

hanno lo stesso problema, ecco la soluzione. Funziona perfettamente, prefissi nomi di campo con il nome della proprietà incorporato (nel tuo caso homeAddress_ e workAddress_)

https://stackoverflow.com/a/3046725/4252764