2016-04-12 16 views
9

Person KlasseJPA: Wie Spaltennamen von @Embedded außer Kraft zu setzen Attribute

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

    //... 
} 

innen Event doppelt so zwei verschiedene Attribute eingebettet ist: manager und operator

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

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

    //... 
} 

Dies sollte jeweils zwei Spalten geben, wenn Generieren eines Datenbankschemas mit Persistence. Stattdessen wird eine Ausnahme ausgelöst:

org.hibernate.MappingException: Wiederholter Spalte in Zuordnung für Einheit: Ereignis Spalte: Code

Wie Standardspaltennamen code für jedes Attribut außer Kraft zu setzen?

+0

Verwenden '@ AssociationOverrides' (für Entität Beziehungen) aussehen würde oder' @ AttributeOverrides' (für einfache Attribute) – Thomas

Antwort

21

Verwenden @AttributeOverride, hier ist ein Beispiel

@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", 
          [email protected](name="ADDR_STATE")), 
     @AttributeOverride(name="zipcode.zip", 
          [email protected](name="ADDR_ZIP")) 
    }) 
    @Embedded protected Address address; 
    ... 
} 

In Ihrem Fall ist es wie dieses

@Entity 
public class Event { 
    @Embedded 
    @AttributeOverride(name="code", [email protected](name="manager_code")) 
    public Person manager; 

    @Embedded 
    @AttributeOverride(name="code", [email protected](name="operator_code")) 
    public Person operator; 

    //... 
} 
+0

Dies funktioniert nicht für mich, da ich zwei Instanzen der gleichen '@ Embeddable' Klasse habe, nicht zwei verschiedene wie in deinem Beispiel. –

Verwandte Themen