2012-06-14 12 views
6

Ich habe zwei Tabellen:Hibernate OneToOne verbunden mit einzigartigen, aber nicht Primärschlüssel

  1. Benutzer:

    • user_id (primär)

    • etc ..

  2. users_info

    • id (primär)

    • user_id (unique)

    • etc ..

Ich möchte einen OneToOne erstellen Beziehung von user bis user_info auf dem Feld user_id. Beachten Sie, dass es einzigartig, aber nicht primär ist. Kann es auf Hibernate getan werden? Was auch immer ich mache, Hibernate versuchen, das Feld users_info.id anstelle von sers_info.user_id Feld zu verwenden.

Antwort

2

Warum möchten Sie einen "eindeutigen" Schlüssel, der eine 1-1-Zuordnung und eine Ersatz-ID ist? Es ist überflüssig. Machen Sie die beiden PKs gleich, da es sich um ein 1-1-Mapping handelt.

+0

Während ich mit Ihnen einverstanden bin, hatte ich einen Kunden diktieren diese "Anforderung" für mich und musste es implementieren. Ja, ich wache immer noch in kaltem Schweiß darüber auf .... – Namphibian

0

Ja, das sollte funktionieren. In Eins-zu-Eins oder Viele-zu-Eins haben Sie einen Primärschlüssel in der ersten Tabelle und einen Fremdschlüssel in der zweiten Tabelle.

0

Das Mapping sollte so funktionieren, wie Sie die Tabellenspalte für den Join definiert haben. Aber eine Sache bin ich nicht sicher, da Sie alle Anmerkungen über die Getter-Methode definiert haben, also wird es auf die gleiche Weise funktionieren.

2

In User sollten Sie haben:

@OneToOne(mappedBy="user", cascade = CascadeType.ALL, fetch=FetchType.LAZY, optional=true) 
public UserInfo getUserInfo() { return userInfo; } 

Und in UserInfo:

@OneToOne 
@JoinColumn(name="user_id") 
public User getUser() { return user; } 

Werfen Sie einen Blick here. Es ist das zweite Beispiel für Eins-zu-Eins-Mapping.

Verwandte Themen