2016-11-18 31 views
5

Używam greendao do utrzymywania bazy danych SQL na Androidzie. Obecnie mam problem z generowaniem encji z dwiema kolumnami jako kluczem podstawowym. Aby było jasne, mam kolumnę 1 i kolumnę 2 obie są wartościami Long i razem tworzą klucz podstawowy.Podstawowy klucz GreenDao na wielu kolumnach

Próbowałem modelować go jako

@Index(unique = true) 
private Long column1, column2 

ale to nie działa. Otrzymuję unikalne ograniczenie nie powiodło się podczas próby wstawienia i przy próbie wstawieniaOrReplace po prostu zastępuje na podstawie identyfikatora column1.

Odpowiedz

5

mam rozwiązać go poprzez zdefiniowanie podmiotu tak:

@Id(autoincrement = true) //I totally don't care about value of this field 
private Long idLocal; 

@Index //this are 2 columns that I use as primary key 
private Long column1id, column2id; 

wiem, że prawdopodobnie nie jest to najlepsze rozwiązanie, ale działa. Jednak nagroda jest nadal otwarta i dam ją każdemu, kto może dać mi lepsze rozwiązanie.

3

GreenDao nie obsługuje złożonych kluczy podstawowych, jak można się spodziewać.

Issue 26 został otwarty na projekcie github w związku z tym i Issue 476 odnosi się również do niego.

Możesz spróbować i obejść go, mając identyfikator klucza podstawowego, który odwołuje się do dodatkowych właściwości, ale to nie pozwoli ci ustawić unikalnego ograniczenia na twoich polach, więc będziesz musiał się sprawdzić.

Zobacz także http://greenrobot.org/greendao/documentation/modelling-entities/#Primary_key_restrictions

+5

Udało mi się dodać unikalne ograniczenia do pól, wykonując następujące czynności. Na przykład, gdy chcemy, aby tabela 'klienta' miała unikalne ograniczenie na obu polach imienia i nazwiska (w praktyce jest to złe, ale tylko przykład), umieszczasz informacje w adnotacji' @ Entity' (Green9,4 3) w następujący sposób: '@Entity (nameInDb =" customer ", indexes = {@Index (value =" firstname, lastname ", unique = true)})' –

+0

To jest najlepsze rozwiązanie do tej pory i działa idealnie. Modelowanie Greendao Entity mówi to samo. http://greenrobot.org/greendao/documentation/modelling-entities/#crayon-5949da361cc17011493334 – xrnd