Každý entitný objekt musí mať asociovaný objekt primárneho kľúča, alebo jednoducho primárny kľúč. Táto požiadavka vyplýva z toho, že entitné objekty v drvivej väčšine prípadov korešpondujú s riadkami v obvykle previazaných tabuľkách relačnej databázy. Dokonca aj keď by ste použili entitný objekt na reprezentáciu iného typu dát, stále budete musieť asociovať primárny kľúč s každým unikátnym elementom vašej dátovej štruktúry.

Na začiatok chcem zdôrazniť, že nie všetky dáta asociované s entitnou triedou sa nachádzajú v jednej samostatnej tabuľke. Oveľa častejšie entity bean poskytuje reprezentáciu dát z viacerých asociovaných tabuliek. Napriek tomu sa však môže vyskytnúť aj situácia, keď je EB asociovaná len s jednou samostatnou tabuľkou. Vtedy je použitie primárneho kľúča pomerne priamočiare.

Rovnako ako databázové tabuľky, na ktoré sú EB namapované, aj entitné objekty musia podporovať primárne kľúče definované buď jedným poľom, alebo kombináciou viacerých polí. Rozdiel prácnosti pri samotnej implementácii nie je až taký markantný, avšak ak budete potrebovať využiť kombinácie polí, bude to vyžadovať predsa len určitú prácu navyše. V článku sa budeme zaoberať obidvoma spôsobmi.

Primárny kľúč a jednorozmerné pole

Primárny kľúč tabuľky je obvykle uložený v jednorozmernom poli, ktoré môže obsahovať hodnoty typu „celé číslo“ alebo „reťazec“. Tieto hodnoty musia unikátne identifikovať jednotlivé záznamy, teda sa nemôžu vyskytovať viacnásobne. V tomto prípade je definovanie primárneho kľúča pre korešpondujúcu entitnú triedu pomerne jednoduché. V podstate musíte iba zadefinovať triedu primárneho kľúča v deployment descriptore príslušnej entity bean. (Deployment descriptormi sme sa zatiaľ podrobne nezaoberali, ale čaká nás to.) Zatiaľ si iba uvedieme ako identifikovať celočíselný primárny kľúč.

Primárny kľúč a jednorozmerné pole
Primárny kľúč a jednorozmerné pole (plná velikost, cca 8 kB)

Ako môžete vidieť, element <prim-key-class> je určený na identifikovanie triedy primárneho kľúča. Trieda primárneho kľúča môže byť akýkoľvek RMI-IIOP dátový typ, čo obvykle znamená, že musí implementovať rozhranie Serializable a naopak nesmie implementovať rozhranie java.rmi.Remote. Napríklad to môžu byť štandardné Java typy, ako je String, Integer a Long.

Ak použijete CMP (Container Managed Persistence) v spojitosti so single-field primárnym kľúčom, musíte ešte navyše identifikovať jedno pole patriace danej entitnej triede, ktoré sa bude mapovať na primárny kľúč. Táto mapovačka sa zabezpečí cez element <primkey-field>. Môže to byť napríklad takto:


<prim-key-class>java.lang.Integer</prim-key-class>
<primkey-field>id</primkey-field>

Pole, ktoré určíte pomocou elementu <primkey-field>, musí byť pole spravované EJB kontajnerom a musí byť takého typu, ako definuje element <prim-key-class>. Pozor, nikdy nesmiete použiť element <primkey-field> v prípade, ak využívate BMP (Bean Managed Persistence) alebo CMP v spojitosti s multiple-field primárnym kľúčom.

Primárny kľúč a viacrozmerné pole

Ak mapujete entitnú triedu na tabuľku, ktorej primárny kľúč je vytvorený kombináciou dvoch a viacerých polí, musíte deklarovať triedu, ktorá bude tento kľúč reprezentovať. Aj táto trieda musí spĺňať požiadavky RMI-IIOP dátového typu a musí zabezpečiť vhodnú implementáciu metód hashCode a equals. V prípade, že použijete CMP, musí trieda spĺňať nasledovné podmienky (pre BMP platia prvé tri):

  • Trieda musí byť deklarovaná ako public.
  • Trieda musí deklarovať verejne dostupný, bezparametrický konštruktor.
  • Všetky polia tvoriace kľúč musia byť deklarované ako public.
  • Každé pole tvoriace kľúč musí v názve presne zodpovedať názvu poľa spravovaného EJB kontajnerom.

Keď vytvárate triedu primárneho kľúča, obvykle tak robíte za účelom podpory konkrétnej entitnej triedy. Ale na druhej strane môžete použiť tú istú triedu primárneho kľúča pre niekoľko rôznych entitných objektov.

Nasledovný výpis uvádza príklad triedy predstavujúcej primárny kľúč zložený z dvoch polí. Trieda CarModel reprezentuje kľúč, ktorý môže jednoznačne identifikovať vozidlo pomocou značky a názvu modelu.

Trieda CarModel
Trieda CarModel (plná velikost, cca 5 kB)

Súhrn

Obvykle je možné pomerne rýchlo identifikovať, z akých polí by mal byť primárny kľúč poskladaný. Napríklad v prípade identifikácie vozidla je použitie názvu značky a modelu pomerne intuitívne. Alebo v prípade zamestnancov to obvykle býva osobné číslo priradené personálnym oddelením. Niekedy to však nie je také jednoduché. Mnohokrát musí byť primárny kľúč iba unikátny textový alebo číselný reťazec. A na tom nie je nič intuitívne. Ak použijete CMP, je možné prenechať výber triedy primárneho kľúča na kontajner.

Žádný příspěvek v diskuzi

Odpovědět