Ich habe eine Datenbank für meine Android-App erstellt, die 16 Tabellen enthält. Ich möchte ORMLite Mapping verwenden. Das Problem ist, dass ich keine Beispiele gefunden habe, wo Sie eine zusammengesetzte ID (mehrere Primärschlüssel) haben. Zum Beispiel habe ich eine Tabelle:
%Vor%Können Sie mir bitte sagen, wie ich diese Tabelle der Klasse zuordnen soll (wie diese Klasse aussehen soll), ist das überhaupt möglich?
%Vor%Einschränkungen
Der Einfachheit halber und damit die gleiche POCO-Klasse in db4o, memcached, redis oder im Dateisystem beibehalten werden kann (d. h. Anbieter, die in ServiceStack enthalten sind), muss jedes Modell eine einzige haben Primärschlüssel, per Konvention OrmLite erwartet, dass es Id ist, obwohl Sie benutze [Alias ("DbFieldName")] attribiere es auf eine Spalte mit einem anderen Namen oder verwenden Sie das Attribut [PrimaryKey], um OrmLite mitzuteilen Verwenden Sie eine andere Eigenschaft für den Primärschlüssel.
Sie können immer noch SELECT aus diesen Tabellen auswählen, Sie werden es einfach nicht können Verwenden von APIs, die darauf beruhen, z. Aktualisieren oder Löschen, wo der Filter ist implizit (d. h. nicht angegeben), alle APIs, die mit enden ById usw.
Umgehung einzelner Primärschlüsseleinschränkungen
Eine mögliche Problemumgehung zur Unterstützung von Tabellen mit mehreren Primärschlüsseln ist Erstellen einer automatisch generierten Id-Eigenschaft, die einen eindeutigen Wert zurückgibt basierend auf allen Primärschlüsselfeldern, z. B .:
Es ist möglich, ein künstliches ID-Feld zu erzeugen, das aus einer Zusammensetzung anderer Felder besteht.
Dies kann durch Einstellungen der useSetGet
Eigenschaft in @DatabaseField
Annotation to true.
Dadurch ruft ORMLite die Getter- und Setter-Methoden auf, anstatt Reflektionen zu verwenden.
In Ihrem Getter können Sie dann eine Zusammensetzung Ihrer Felder zurückgeben.
Das würde in Ihrem Beispiel etwa so aussehen:
%Vor% Ormlite von ServiceStack unterstützt nicht mehrere zusammengesetzte Primärschlüssel. Damit Ihre POCOs auch außerhalb einer db nützlich sind (zB NoSQL-Datenspeicher, Cache-Provider usw.) erwartet Ormlite für jeden Typ einen einzelnen Primärschlüssel, der standardmäßig die Id
-Eigenschaft ist (überschreibbar mit der ModelConfig-Klasse oder% co_de) %, [PrimaryKey]
Attribute).
Work-arounds, um diese Einschränkung zu umgehen, umfassen das Erstellen einer einzelnen eindeutigen ID, aber eine eindeutige Einschränkung für die zusammengesetzten Primärschlüssel, z. B .:
%Vor%Oder erstellen Sie eine Pseudospalte, die eine Kombination aller Primärschlüssel enthält, z. B .:
%Vor%