2017-06-13 2 views
1

Ich habe die folgenden 2 Klassen (Entitäten).JPA HIbernate - ManyToOne Mapping - einfügen, wenn nicht existiert

Person Klasse

@Entity 
@Table(name = "person") 
public class Person { 

    @Id 
    @GeneratedValue(strategy= GenerationType.SEQUENCE, 
    generator="person_id_seq") 
    @SequenceGenerator(name="person_id_seq", sequenceName="person_id_seq", 
    allocationSize=1) 
    private Integer person_id; 

    @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.ALL}) 
    @JoinColumn(name = "location_id") 
    private Location location; 
} 

Standort Klasse

@Entity 
@Table(name = "location") 
public class Location { 

    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "location_seq_gen") 
    @SequenceGenerator(name = "location_seq_gen", sequenceName = "location_id_seq", allocationSize = 1) 
    @Column(name = "location_id") 
    private Long id; 

    @Column(name = "address_1") 
    private String address1; 

    @Column(name = "address_2") 
    private String address2; 

    @Column(name = "city") 
    private String city; 

    @Column(name = "state") 
    private String state; 

    @Column(name = "zip") 
    private String zipCode; 

    @Column(name = "location_source_value") 
    private String locationSourceValue; 

public Location() { 
} 

public Location(String address1, String address2, String city, String state, String zipCode) { 
    this.address1 = address1; 
    this.address2 = address2; 
    this.city = city; 
    this.state = state; 
    this.zipCode = zipCode; 
} 

public Long getId() { 
    return id; 
} 

public Long getId(String address1, String address2, String city, String state, String zipCode){ 
    return this.id; 
} 

public void setId(Long id) { 
    this.id = id; 
} 

public String getAddress1() { 
    return address1; 
} 

public void setAddress1(String address1) { 
    this.address1 = address1; 
} 

public String getAddress2() { 
    return address2; 
} 

public void setAddress2(String address2) { 
    this.address2 = address2; 
} 

public String getCity() { 
    return city; 
} 

public void setCity(String city) { 
    this.city = city; 
} 

public String getState() { 
    return state; 
} 

public void setState(String state) { 
    this.state = state; 
} 

public String getZipCode() { 
    return zipCode; 
} 

public void setZipCode(String zipCode) { 
    this.zipCode = zipCode; 
} 

public String getLocationSourceValue() { 
    return locationSourceValue; 
} 

public void setLocationSourceValue(String locationSourceValue) { 
    this.locationSourceValue = locationSourceValue; 
} 

}

Was ich tun möchte, der Lage sein, ist die folgende.

  • Wenn ich eine neue Person Datensatz einfügen, werde ich liefere das AddressLine1, AddressLine2, Stadt, Bundesland, Postleitzahl und es sollte in der Lage Tabelle überprüfen, ob der Datensatz vorhanden ist. Wenn es vorhanden ist, rufen Sie die location_id aus der Location-Tabelle ab und fügen Sie den neuen Personendatensatz mit der vorhandenen location_id ein. Wenn es nicht existiert, erstellen Sie einen neuen Datensatz in der Location-Tabelle, rufen Sie die location_id ab und verwenden Sie diese als location_id für den neuen Personendatensatz.

Ich glaube, dass dies mit den entsprechenden JPA Hibernate Annotationen erreicht werden kann.

Derzeit, wenn ich einen neuen Personendatensatz einfüge, erstellt es einen neuen Datensatz in der Standorttabelle, selbst wenn der Standort vorhanden ist.

Bitte helfen. Danke im Voraus!

Antwort

0

Haben Sie die Methoden equals und hashCode übersteuert? Mit dieser Methode fügen Sie jede Zeile in der Tabelle hinzu. Sie haben Annotationen richtig angegeben, aber Hibernate kann nicht feststellen, ob diese Zeile existiert oder nicht. Intern verwendet Hibernate Map, sodass equals und hashCode Ihr Problem lösen sollten.

+0

Vielen Dank für Ihre Antwort. Bitte können Sie das an einem Beispiel erläutern. – coder1416

+0

Bitte schauen Sie in diesen Link https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/persistent-classes.html#persistent-classes-equalshashcode Hier finden Sie, warum Sie brauchen überschreiben Sie diese Methoden und Beispiele. –

+1

@Sergiy Rezvan Ich stehe vor dem gleichen Problem, aber ich verstehe nicht klar, was genau angegeben ist. Bitte erläutern Sie, welche Änderungen in den Entitätstabellen vorgenommen werden sollten. – eccentricCoder

Verwandte Themen