Relacja oneToOne bez klucza obcego

0

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

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.

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ę?

2

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

Skąd taki dziwny pomysł?

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?

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)

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.

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1