OrmLite – realizacja relacji wiele-do-wielu

W tym wpisie przedstawiłem orientacyjny schemat bazy danych, który będzie zastosowany w mojej aplikacji. Można tam zauważyć relacje wiele-do-wielu pomiędzy tabelami tags i documents oraz tabele documents_tags, która jest tak zwaną tabelą skrzyżowań.

OrmLite niestety nie wspiera relacji wiele-do-wielu, ale sama realizacja tego na szczęście nie jest trudna.

Zacznę od pokazania encji dla tabeli documents_tags.

Jak widać encja zawiera tylko 3 pola:

  • id – id encji, które jest wymagane
  • document – klucz obcy odnoszący się do dokumentu
  • tag – klucz obcy odnoszący się do tagu

Encja tag wygląda następująco:

Wydaję mi się, że tutaj nie ma nic do tłumaczenia 🙂

Encja dla dokumentu wygląda natomiast tak:

Tutaj istotne jest następujące pole:

Jak widać jest to ‚obca’ kolekcja. Co będzie zawierała kolekcja po pobraniu dokumentu przy pomocy metody queryForId?

Otóż, jak można się domyślić, kolekcja ta będzie zawieraja liste encji DocumentTag powiązanych z dokumentem. Jest tylko jeden haczyk – pobrane encje DocumentTag nie zawierają ‚całych’ obiektów, a jedynie ich id. Czyli np. instancja klasy Tag w pobranej kolekcji bedzie zawierała uzupełnione id, lecz pole name zawsze będzie puste.

Mając tą wiedze wystarczą dwa kroki do pobrania naszych tagów.

Po pierwsze musimy stworzyć metodę, która na podstawie listy id tagów, zwróci nam tagi.

A mając pobraną naszą encje możemy pobrać jej taki wywołując powyższą metodę w następujący sposób:

 

Jak widać pomimo braku jawnego wsparcia dla relacji wiele-do-wielu możemy sobie z tym w miarę ładny sposób poradzić 🙂

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *