2017-12-22 7 views
0

Ich lerne Hibernate und versuche zu verstehen, wie man die Beziehung zwischen zwei Entitäten herstellen kann (OneToOne, OneToMany, ManyToMany). Betrachten Sie das einfache Szenario:Wie kann man OneToMany- oder ManyToOne-Beziehungen zwischen Entitäten in Hibernate lesen?

Benutzer Entity:

@Entity 
class User { 
    @Id 
    private userId; 

    private Vehicle vehicle; 

    // other code 
} 

Fahrzeug Entity:

@Entity 
pubic class Vehicle { 
    @Id 
    private int vehicleId; 
    private String desc; 

    // other code 
} 

Mein Ziel ist es zu spezifizieren:

One to Many relationship oder One to one Beziehung zwischen User und Vehicle Einheiten.

Ich weiß, es gibt OneToOne, OneToMany Anmerkungen, aber ich kann nicht verstehen, wie diese Beziehung interpretiert wird? Kommt es darauf an, in welcher Entität die andere Entität platziert ist?

Zum Beispiel:

@Entity 
class User { 
    @Id 
    private userId; 

    private Vehicle vehicle; 

    // other code 
} 

Wie wir sehen können, habe ich die Vehicle Einheit innerhalb der User Einheit platziert und wenn ich OneToMany Anmerkung oben auf Vehicle Entität verwenden, ist es 1 bedeutet: M Beziehung zwischen User ->Vehicle Einheit.

Kann mir jemand helfen, das zu verstehen?

+2

ein Benutzer mit vielen Auto sollte mit einer Sammlung von Fahrzeug und ein Benutzerfeld auf den Fahrzeugeinheiten – Zeromus

+0

vielen Dank für Ihre Antwort abgebildet werden; aber mein Zweifel bleibt gleich: Wie interpretieren wir die Beziehung? Basiert es auf der Entität, die in eine andere Entität eingebettet ist? – CuriousMind

+1

Sie könnten dies überprüfen (https://stackoverflow.com/a/21068644/6413377). Dann auch [das] (https://stackoverflow.com/a/15902607/6413377). Ja, 'Benutzer' (1) (m)' Fahrzeuge'. Und wie Zeromus sagte: 'Private Collection Fahrzeuge;' sollte in diesem Fall in 'User' verwendet werden. – pirho

Antwort

1

Ich werde dies eine Antwort zu erklären besser machen, aber bedenken Sie, dass dies wirklich die Grundlagen der Winterschlaf-Mappings sind und Sie können sie wahrscheinlich in jedem Tutorial online lesen.

mit dem Sein Benutzertabelle:

userId userName etc 

und Fahrzeug Tisch

vehicleId userIdFK etc 

ist es offensichtlich, dass eine Beziehung: ein Benutzer mehr Fahrzeug.

diese Beziehung zu ordnen Sie haben

@Entity 
class User { 
    @Id 
    private userId; 

    private String userName 

    // other code 
} 

und

@Entity 
pubic class Vehicle { 
    @Id 
    private int vehicleId; 
    private String desc; 

    @ManyToOne 
    @JoinColumn(name = "userIdFK", referencedColumnName = "userId") 
    private User user; 
    // other code 
} 

Dies ist das, was sie als eine unidirektionale Mapping wissen ist, wo man nur das Wesentliche haben Hibernate wissen zu lassen, von der Anwesenheit des FK auf der db

@ManyToOne die Art der Beziehung angeben (ein Fahrzeug ist von einem Benutzer)

Während @JoinColumn wird verwendet, um zu sagen "Hey Hibernate Vehicle-Tabelle hat eine FK gegenüber User-Tabelle" mit dem Namen und referredColumnName ist der db-Spalte Name in der Fk beteiligt.

Wenn Sie möchten, können Sie die Relaisionship als bidirektional machen, was manchmal nützlich ist, wenn Sie eine Referenz von der nicht-besitzenden Seite der Assoziation (in diesem Fall von Benutzer zu Fahrzeug) hinzufügen, so dass Sie von beiden Klassen zu bekommen

andere
@Entity 
class User { 
    @Id 
    private userId; 
    private String userName 

    @OneToMany(mappedBy = "user") 
    private List<Vehicle> vehicleList; 
    // other code 
} 

mappedBy muss das andere Feld geben Sie die Beziehung abbildet

Verwandte Themen