2012-02-07 18 views
19

Obecnie gram z ORMlite, aby stworzyć model z tabelami i relacjami. Jedna relacja to relacja wiele do wielu. Jaki jest najlepszy sposób na wdrożenie tego?Jaki jest najlepszy sposób wdrożenia relacji między wieloma osobami za pomocą ORMLite?

Aby być bardziej konkretny:

Powiedzmy mam te dwie tabele

Product 
    id 
    brand 

Purchase 
    id 

Zakup może mieć kilka produktów i produkty mogą być one w kilku zakupów. Korzystanie z ORMLite Mogłem mieć @ForeignCollectionField w każdym modelu, ale nie sądzę, by to działało. Jedynym prawidłowym rozwiązaniem, jakie widzę, jest utworzenie trzeciej tabeli Product_Purchase w celu powiązania produktu i zakupu ze związkami "jeden do jednego".

Co wy ludzie myślicie?

Odpowiedz

27

@ Samotna odpowiedź Romaina jest poprawna, ale tutaj jest więcej informacji dla potomności. Jak sam wspomina, nie jest przykładem wielu-do-wielu ORMLite projekt, który pokazuje, że najlepszym sposobem, aby to zrobić:

http://ormlite.com/docs/example-many

Przykład wykorzystuje tabelę łączenia się z identyfikatora obu obiektów do przechowywania relacji. W pytaniu @ Romain obiekt łączenia miałby zarówno obiekt Product, jak i obiekt Purchase. Coś jak:

public class ProductPurchase { 
    @DatabaseField(generatedId = true) 
    private int id; 
    @DatabaseField(foreign = true) 
    private Product product; 
    @DatabaseField(foreign = true) 
    private Purchase purchase; 
    ... 
} 

Pola id dostać pochodzących z obiektów, które tworzy tabelę jak:

CREATE TABLE `userpost` (`id` INTEGER AUTO_INCREMENT , `user_id` INTEGER , 
    `post_id` INTEGER , PRIMARY KEY (`id`)) 

wtedy użyć wewnętrzne zapytań znaleźć Product obiekty związane z każdym Purchase i odwrotnie. Zobacz metodę lookupPostsForUser() w przykładowym projekcie dla szczegółów.

Trochę się nad tym zastanawiało i projektowało, ale teraz ORMLite obsługuje wewnętrznie tylko relacje jeden-do-wielu.

+0

Ok wielkie dzięki szary! Chciałem tylko mieć pewność i dobrze to tłumaczyłeś. –

+1

Dziękuję również za odpowiedź, ale Gray, ten fakt jest naprawdę słabo udokumentowany. Nie jest dobry dla masywnych aplikacji na Androida, które chcą używać ORMLite. – eento

+0

Czy możesz być bardziej konkretny @eento? Czy możesz napisać lepsze dokumenty? – Gray

6

Ok Zgaduję, że jedynym sposobem, aby przejść, jest stworzenie trzeciej tabeli Product_Purchase. Jest to oznaczone w sample project.

-1

Musisz stworzyć klasę ProductPurchase i zarządzać nią tak, jakby był to kolejny obiekt, który musi przejść do twojej Bazy danych.

Możesz (ale nie musisz) mieć kolekcję produktów w Zakupach (i na odwrót), ale będą one musiały być ręcznie aktualizowane/tworzone podczas ładowania relacji między Produktami i Zakupami z ProductPurchase Tabela linkerów. Posiadanie tych kolekcji nic nie znaczy dla ORM (nie będziesz i nie powinieneś ich opisywać).

Jeśli ktoś szuka i Android App z wiele do wielu relacji Pracowałem na przykład: https://github.com/arthurrauter/ormlite-android

Powiązane problemy