2016-11-18 2 views
5

Ich verwende greendao, SQL-Datenbank auf Android zu pflegen. Im Moment stehe ich vor einem Problem, Entity mit zwei Spalten als Primärschlüssel zu generieren. Um klar zu sein, ich habe Spalte1 und Spalte2 beide von ihnen sind Long-Werte und sie bilden zusammen einen Primärschlüssel.GreenDao Primärschlüssel auf mehreren Spalten

Ich versuchte, es als

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

zu modellieren, aber es funktioniert nicht. Ich bekomme einzigartige Einschränkung fehlgeschlagen beim Versuch zu einfügen und beim Versuch, inserOrReplace ersetzt einfach basierend auf Spalte1 ID.

Antwort

5

ich es Unternehmen wie dies durch die Definition gelöst haben:

@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; 

Ich weiß, dass dies wahrscheinlich nicht beste Lösung ist, aber es funktioniert. Aber Kopfgeld ist noch offen und ich werde es jedem geben, der mir eine bessere Lösung geben kann.

3

GreenDao unterstützt keine zusammengesetzten Primärschlüssel, wie Sie vielleicht erwarten.

Issue 26 wurde auf dem GitHub-Projekt in Bezug auf diese geöffnet, und Issue 476 Referenzen es auch.

Sie können versuchen, es zu umgehen, indem Sie eine ID für den Primärschlüssel, der auf zusätzliche Eigenschaften verweist, aber Sie können keine eindeutige Einschränkung für Ihre Felder festlegen, so dass Sie sich selbst validieren müssen.

Siehe auch http://greenrobot.org/greendao/documentation/modelling-entities/#Primary_key_restrictions

+5

Ich konnte Felder zu einzigartigen Einschränkungen hinzufügen, indem Sie Folgendes tun. Für ein Beispiel, in dem eine "Kunden" -Tabelle eine eindeutige Beschränkung sowohl für Vor- als auch Nachnamen haben soll (in der Praxis schlecht, aber nur ein Beispiel), fügen Sie Informationen in die '@ Entity' Annotation (GreenDao 3) wie folgt ein: '@Entity (nameInDb =" Kunde ", indexes = {@Index (Wert =" Vorname, Nachname ", Unique = True)})' –

+0

Dies ist die beste Lösung bisher und es funktioniert perfekt. Greendao Entity Modeling sagt das Gleiche. http://greenrobot.org/greendao/documentation/modelling-entities/#crayon-5949da361cc17011493334 – xrnd

Verwandte Themen