2017-02-18 1 views
0

Ich versuche, eine Spring Boot-Datenschicht über der DB eines anderen Projekts zu erstellen. Ich möchte zu einem Punkt kommen, an dem ich ihre Daten über Restful Endpoints und nicht direkt aus der Datenbank abrufen kann. Maximale Abstraktion ist das Ziel. Hier ist mein Problem. Betrachten Sie die folgende JPA-Entität:So modellieren Sie Lookup-Tabellen JPA

Beachten Sie, dass favoriteFood eine lange, keine Zeichenfolge ist. Dies liegt daran, dass die Datenbank eine Nachschlagetabelle verwendet. Sagen wir, Joe's Lieblingsessen ist Pizza. Die Personentabelle speichert eine 1 in der favorite_food-Spalte, die der fk entspricht, zu dem in der Tabelle "food_ref" gespeicherten Wert "pizza". Dieses Muster wird Hunderte oder Male in der DB wiederholt. Was ist der beste Weg, dies in JPA/Hibernate zu modellieren? Ändern Sie die Variable in String und lassen Getter und Setter die Suche durchführen? Ich habe keine Beispiele gefunden, die seltsam erscheinen. Dies ist eine allgemeine DB-Struktur. Jeder Rat zu Best Practices wäre willkommen. Vielen Dank!

Antwort

0

Der beste Weg, in diesem Szenario ist 12.59 Beziehung in der JPA-Entität mit der FoodRef Klasse zu verwenden

@Entity 
@Table(name = "PERSON", schema = "public") 
public class Person { 
    @Id private long id; 
    private String name; 

    @OneToOne(fetch=FetchType.LAZY) 
    @JoinColumn(name="food_ref_id") 
    private FoodRef favoriteFood; 

    private Address address; 

    //Getters, Setter etc..... 
} 
+0

Ich fordere würde die 'holen = FetchType, LAZY' Attribut in der' @ OneToOne' Annotation, sofern sie nicht aus irgendeinem Grund im Projekt benötigt wird. –

+0

Person zu FoodRef ist eindeutig eine ManyToOne-Beziehung. –

Verwandte Themen