2017-04-26 3 views
0

Beim Einfügen in Hibernate für OneToMany Mapping. Die gleichen Daten werden zweimal eingefügt.Doppelte Daten für OneToMany-Mapping im Ruhezustand

Mitarbeiter:

@Entity 
public class Employee { 
    @Id 
    @GeneratedValue 
    private int empId; 
    private String name; 
    private String designation; 

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "employee", fetch = FetchType.EAGER, orphanRemoval = true) 
    private Set<Address> addresses = new HashSet<>(); 
} 

Adresse:

@Entity 
public class Address { 
    @Id 
    @GeneratedValue 
    private int addressID; 
    private String city; 
    private String country; 

    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
    @JoinColumn(name = "empId") 
    @JsonIgnore 
    private Employee employee; 
} 

Wenn ich POST-Anfrage verwenden, um die Daten zu speichern: speichern Anfrage für den 1. Mitarbeiter:

{ 
    "name": "Test1", 
    "designation": "SAL1", 
    "addresses": [ 
    { 
     "city": "Delhi", 
     "country": "India" 
    }, 
    { 
     "city": "Noida", 
     "country": "India" 
    } 
    ] 
} 

speichern Anfrage für 2. angestellter:

{ 
    "name": "Test2", 
    "designation": "SAL2", 
    "addresses": [ 
    { 
     "city": "Delhi", 
     "country": "India" 
    }, 
    { 
     "city": "Noida", 
     "country": "India" 
    } 
    ] 
} 

In diesem Fall in Adresstabellen enthält 4 Einträge jeweils 2 für Noida: Indien und Delhi: Indien.

Ich wollte verstehen, was ist der beste Weg, nur 1 Eintrag für jede Adresse Daten haben, zum Beispiel 1 für Noida: Indien und 1 für Delhi: Indien.

+0

Überprüfen Sie, ob Ihre Anfrage zweimal gesendet wird. –

+0

Nein, ich sende es zweimal für zwei verschiedene Mitarbeiter, aber ich möchte, wenn wir diese Adresse bereits in der Adresstabelle haben, die es statt einer neuen Zeile in der Adressentabelle abbilden soll. –

+0

Dann müssen Sie einen zusammengesetzten Schlüssel erstellen, der Land und Stadt enthält. Untersuchen Sie zusammengesetzte Schlüssel –

Antwort

0

Erstellen Sie eine separate Tabelle, in der die Positionseinträge gespeichert werden. Haben Sie den Schlüssel für diese Tabelle einen zusammengesetzten Schlüssel von "Land" und "Stadt". Erstellen Sie dann eine separate Adresstabelle, die eine Fremdschlüsselspalte für "Benutzer" und die Tabelle mit Ländern und Städten enthält.

Verwandte Themen