Relacja oneToOne bez klucza obcego

Relacja oneToOne bez klucza obcego
VA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 127
0

Witam, czy istnieje możliwość połączenia encji w Hibernate bez klucza obcego?

Kopiuj
create table a 
{
     id String PRIMARY_KEY
}

create table b
{
     id String PRIMARY_KEY,
     a_id String
}

Do tej pory robiłem to w taki sposób.

Kopiuj
class A {
     private String id;

     @OneToOne
     private B b;
}

class B {
     private String id;
     
     @JoinColumn(name = "a_id", referencedColumname = "id")
     @OneToOne
     private A a;
}

Czy ktoś może mi powiedzieć w jaki sposób osiągną taką relację?

AK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3561
2

I tak będziesz musiał mieć klucz "prawie" obcy, kompozytowy czy pojedynczy unikalny itd...

Skąd taki dziwny pomysł?

VA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 127
0
AnyKtokolwiek napisał(a):

I tak będziesz musiał mieć klucz "prawie" obcy, kompozytowy czy pojedynczy unikalny itd...

Skąd taki dziwny pomysł?

A to nie jest tak że Hibernata nie obchodzą relacje w bazie?

KamilAdam
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Silesia/Marki
  • Postów: 5549
1

Może najpierw definicja:

Klucz obcy – kombinacja jednego lub wielu atrybutów tabeli, które wyrażają się w dwóch lub większej liczbie relacji. Wykorzystuje się go do tworzenia relacji pomiędzy parą tabel, gdzie w jednej tabeli ten zbiór atrybutów jest kluczem obcym, a w drugiej kluczem głównym.

Więc przy takiej definicji to się nie da bez klucza obcego

To co masz w kodzie jest czasem nazywane czasem sztucznym kluczem. I tutaj tak, da się czasem bez sztucznego klucza głównego, ale jest to problematyczne, bo musisz mieć klucz naturalny (np. dla faktury kluczem naturalnym jest nr faktury)

Charles_Ray
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1909
0

@vakil: może napisz co konkretnie chciałbyś osiągnąć, jak miałoby to wyglądać po stronie bazy i kodu? Coś mi tu nie gra.

Skoq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 255
0

Możesz użyć adnotacji @MapsId, wtedy PK (primary key) i zarówno FK (foreign key) dla klasy B będzie PK klasy A ale nie wiem czy o to dokładnie Ci chodziło

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.