web-dev-qa-db-fra.com

JPA: comment remplacer les noms de colonne des attributs @Embedded

Person classe

@Embeddable
public class Person {
    @Column
    public int code;

    //...
}

est incorporé dans Event deux fois comme deux attributs différents: manager et operator

@Entity
public class Event {
    @Embedded
    @Column(name = "manager_code")
    public Person manager;

    @Embedded
    @Column(name = "operator_code")
    public Person operator;

    //...
}

Cela devrait donner deux colonnes respectives lors de la génération du schéma de base de données avec la persistance. Au lieu de cela, une exception est levée:

org.hibernate.MappingException: colonne répétée dans le mappage pour l'entité: colonne d'événement: code

Comment remplacer le nom de colonne par défaut code pour chaque attribut?

17
Oleg Mikhailov

Utilisation @AttributeOverride , voici un exemple

@Embeddable public class Address {
    protected String street;
    protected String city;
    protected String state;
    @Embedded protected Zipcode zipcode;
}

@Embeddable public class Zipcode {
    protected String Zip;
    protected String plusFour;
}

@Entity public class Customer {
    @Id protected Integer id;
    protected String name;
    @AttributeOverrides({
        @AttributeOverride(name="state",
                           column=@Column(name="ADDR_STATE")),
        @AttributeOverride(name="zipcode.Zip",
                           column=@Column(name="ADDR_Zip"))
    })
    @Embedded protected Address address;
    ...
}

Dans votre cas, cela ressemblerait à ceci

@Entity
public class Event {
    @Embedded
    @AttributeOverride(name="code", column=@Column(name="manager_code"))
    public Person manager;

    @Embedded
    @AttributeOverride(name="code", column=@Column(name="operator_code"))
    public Person operator;

    //...
}
40
Predrag Maric