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.

questionAnswers(5)

yourAnswerToTheQuestion