2016-11-10 2 views
0

Ich bin mit ein paar Zweifel in jpa. Zum Beispiel eine Tabelle Post und eine Tabelle Dateien. Einem Post können viele Dateien zugeordnet sein, und einem Post ist eine Datei zugeordnet, sodass wir eine Eins-zu-viele-Beziehung haben.Karte immer beide Richtungen in einer zu vielen Beziehung

Ich weiß nicht genau, ob wir eine OneToMany-Beziehung oder ManyToOne oder beides erstellen sollen. Zum Beispiel in Post und Dateien Beispiel, was wir fragen müssen, ob seine unidirektionale oder bidirektionale ist, wenn wir wissen wollen, was sind die Dateien, die ein Beitrag haben und auch welche Dateien in einem Beitrag sind, oder? Und wenn es beides ist, ist es eine bidirektionale Beziehung, oder? Aber diese beiden Fragen scheinen sehr ähnlich zu sein, also ist die Antwort normal, ja. Also ist es nicht eine gute Übung Karte immer beide Richtungen?

Beispiel, Mapping immer beide Richtungen:

@Entity 
public class Post{ 
@GeneratedValue(strategy = GenerationType.AUTO) 
    private int id; 

    @OneToMany(mappedBy="post") 
    private List<Files> files= new ArrayList<>(); 
} 

@Entity 
public class File{ 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int id; 

    @ManyToOne 
    @JoinColumn(name="post_id") 
    private Post post; 
} 

Antwort

0

Das alles hängt von der Anforderung und Datenmodell. Es ist keine gute oder schlechte Übung, Beziehungen bidirektional zu machen.

Wenn Sie wollen, dass die Benutzer Files nur über Post erreichen, dann machen Sie es unidirektional. Andernfalls, wenn Sie den Benutzern eine Funktionalität zur Verfügung stellen müssen, um eine Datei direkt zu durchsuchen, und damit Benutzer den Beitrag sehen können, bidirektional machen.

Im Falle einer bidirektionalen Beziehung stellen Sie sicher, dass Sie eine bequeme Methode zum Festlegen der Beziehung zwischen Files und Post erstellen und vergessen Sie nicht, das Attribut inverse zu verwenden.

+0

Danke für Ihre Antwort. Angenommen, Ihr erstes Beispiel, wenn ein Benutzer einige Dateien nur durch einen Post erreichen kann, ist es unidirecitonal. Aber in diesem Fall ist OneToMany oder ManyToOne? Weißt du, wie man das überprüft? – Ozzy

+0

@Ozzy Im Falle einer unidirektionalen - Sie haben ein Listenfeld von Dateien in der Post und Sie müssen die Zuordnung in der Post und natürlich OneToMany Mapping tun – Ubercool

Verwandte Themen