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?
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;
//...
}