Relacja OneToOne ze współużytkowanym kluczem podstawowym generuje n + 1 selekcji; jakiekolwiek obejście?
Wyobraź sobie 2 tabele w relacyjnej bazie danych, np. Osoba i fakturowanie. Istnieje między nimi zdefiniowane (nieobowiązkowe) powiązanie OneToOne, które współdzielą klucz podstawowy Person (tzn. PERSON_ID jest zdefiniowany zarówno w Person, jak i Billingu, aw tym drugim jest kluczem obcym).
Dokonując wyboru na osobie za pośrednictwem nazwanego zapytania, takiego jak:
<code>from Person p where p.id = :id </code>
Hibernate / JPA generuje dwa wybrane zapytania, jedno w tabeli Person, a drugie w tabeli Billing.
Powyższy przykład jest bardzo prosty i nie powoduje żadnych problemów z wydajnością, ponieważ zapytanie zwraca tylko jeden wynik. Wyobraź sobie toPerson
man
Relacje OneToOne (wszystkie nieobowiązkowe) z innymi podmiotami (wszystkie współdzieląPerson
główny klucz).
Popraw mnie, jeśli się mylę, ale działaselect
zapytanie o osobę, powrótr
wiersze, spowoduje(n+1)*r
wybiera generowane przez Hibernate, nawet jeśli skojarzenia sąleniwy.
Czy istnieje obejście tej potencjalnej katastrofy wydajności (innej niż brak wspólnego klucza podstawowego)? Dziękuję za wszystkie twoje pomysły.