2017-09-29 1 views
1

Gibt es einen großen Vorteil auf diesem Ansatz:Gibt es einen Vorteil bei der Verwendung von Entity + "mapped by" gegenüber der Verwendung der ID?

@Entity 
public class A { 
    @ManyToOne(fetch=FetchType.LAZY) 
    @JoinColumn(name = "ID_B") 
    private B b; 
} 

@Entity 
public class B { 
    @OneToMany(mappedBy = "a", cascade = CascadeType.ALL) 
    private List<A> aList; 
} 

... statt dessen ...

@Entity 
public class A { 
    @Column(name = "ID_B") 
    private Long idB; 
} 

@Entity 
public class B { 
    //no reference to A 
} 

ich, was die zweite besser für die Verkapselung ist (wie ich A haben und B-Klassen in verschiedenen Projekten, und die zweite muss nicht auf die Faust).

+1

Sie setzen eine BIDIRECTIONAL-Beziehung, wenn das andere Objekt über das zugehörige Objekt informiert werden muss. Es hat nichts mit "besser" zu tun – DN1

Antwort

1

Ein Vorteil ist, dass die Verwendung von richtigen JPA Beziehungen ermöglichen sie Ihnen, A aus der Datenbank zu holen, und einen einfachen Getter auf A benutzen Sie B: myA.getB()

Während, wenn Sie eine lange verwenden, müssen Sie immer manuell Abfrage der Datenbank erneut, wenn Sie einige B abholen möchten.

Beachten Sie, dass Sie nicht verpflichtet sind, die Beziehung in beide Richtungen zu deklarieren. So etwas ist absolut richtig:

@Entity 
public class A { 
    @ManyToOne(fetch=FetchType.LAZY) 
    @JoinColumn(name = "ID_B") 
    private B b; 
} 

@Entity 
public class B { 
    //no reference to A 
} 

Natürlich hängt alles davon ab, was Sie erreichen wollen!

+0

also wäre es fair zu sagen, dass in Ihrem Ansatz, den Sie die Beziehung gegeben haben, ist unidirektional und das erste Beispiel des Benutzers Tom Brito ist bidirektional? – user641887

+1

Ja, das ist richtig. Natürlich können Sie auch im unidirektionalen Fall bei Bedarf auf die Beziehung in beide Richtungen zugreifen. Dazu ist jedoch eine manuelle Datenbanksuche erforderlich. – brain99

Verwandte Themen