2016-06-25 24 views
0

JPA und Hibernate werden zum Abrufen und Persisten von Entitäten verwendet. Es gibt eine User Tabelle und sie enthält eine Country, die in einer anderen Tabelle dargestellt wird.Automatisch vorhandene Entität in ManyToMany/ManyToOne-Beziehung (JPA) erneut verwenden

Ich möchte einen neuen Benutzer in User Tabelle einfügen. Dieser neue Benutzer stammt aus dem Land, das bereits in die Tabelle Country eingefügt wurde. Um dem neuen Benutzer das vorhandene Land zuzuweisen, konnte ich das Landobjekt aus der Datenbank abrufen und auf User setzen - es funktioniert wie erwartet, es wird eine Beziehung zwischen Benutzer und dem vorhandenen Land erstellt, es werden keine neuen Zeilen in die Tabelle Country eingefügt.

Ist es möglich, dasselbe Verhalten zu erhalten, ohne Country Objekte aus der Datenbank abzurufen, nur basierend auf dem Wert, den ich auf das Country Objekt in der JPA-Entität in Java festgelegt habe?

Zum Beispiel:

User user = new User("test user"); 
user.setCountry(new Country("USA")); 
entityManager.persist(user); 

Ich möchte JPA/Hibernate automatisch überprüfen, ob das Land, das Code USA ist (Code wird in einer Spalte in Land-Tabelle gespeichert und es ist einzigartig), die bereits in existiert die Datenbank. Wenn dies der Fall ist - verwenden Sie das vorhandene Land-Objekt, damit kein neuer Eintrag in der Datenbank erstellt wird, falls es nicht existiert - fügen Sie ein neues Land in die Tabelle Land ein.

Vielen Dank!

Antwort

0

Ich denke, Sie können von Benutzer Entity erstellen 2 Zuordnung zu Land.

@Column
private Zeichenfolge country_code;
und
@ManyToOne
@JoinColumn
Land des Landes;

Bevor neue Daten speichern Sie nur einrichten müssen die country_code anstelle des Unternehmens, können Sie nach dem Speichern können entityManager.refresh tun (Benutzer), wird es das @ManyToOne Feld laden Sie

Also ich denken,

<code>User user = new User("test user"); 
user.setCountry_code("USA"); 
entityManager.persist(user); 
entityManager.refresh(user); 
Verwandte Themen