In den FAQs zu greendao heißt es: "Ab greenDAO gibt es eingeschränkte Unterstützung für String-Primärschlüssel." http://greendao-orm.com/documentation/technical-faq/greundo string primary keys - wie man verwendet
Ich kann nirgendwo finden, wie dies zu tun ist.
Ich verwende Guids als meinen Primärschlüssel in einer Server-Anwendung und möchte in der Lage sein, neue Daten von einem Android-Gerät remote zu generieren und diese zurück auf den Server zu laden. Die Datenbank auf dem Android-Gerät befindet sich in sqlite und verwendet greenDAO zum Generieren von POJOs und Datenzugriffsschichten. Ich verwende Guids, um Primärschlüsselkollisionen zu vermeiden, wenn Daten auf den Server hochgeladen werden. Ich speichere die Guids als Strings.
Es gibt einige weitere Hinweise auf der greendao-Website, die besagt, dass ich ein sekundäres Feld erstellen soll, das die Zeichenfolge enthält und den von greundo bevorzugten langen Primärschlüssel verwendet, aber das bedeutet, dass ich beim Import alle meine Datenbankbeziehungen wiederherstellen muss Daten vom Server zur App, was ein Schmerz ist. Würde viel lieber nur die String-Primärschlüssel verwenden, wenn das möglich ist.
Kann jemand mir sagen, wie man das macht? Hier
ist einige Beispiel-Code ...
In meinem Generator (ich die meisten Felder aus Gründen der Klarheit entfernt haben):
private static void addTables(Schema schema)
{
Entity unit = addUnit(schema);
Entity forSale = addForSale(schema);
Property unitIntId = forSale.addLongProperty("unitIntId").getProperty();
forSale.addToOne(unit, unitIntId);
}
private static Entity addForSale(Schema schema)
{
Entity thisEntity = schema.addEntity("ForSale");
thisEntity.addIdProperty();
thisEntity.addStringProperty("forSaleId");
thisEntity.addFloatProperty("currentPriceSqFt");
thisEntity.addStringProperty("unitId");
return thisEntity;
}
private static Entity addUnit(Schema schema)
{
Entity thisEntity = schema.addEntity("Unit");
thisEntity.addIdProperty();
thisEntity.addStringProperty("unitId");
thisEntity.addStringProperty("name");
return thisEntity;
}
In meinem Android-Anwendung herunterladen ich alle Daten aus der Server. Es hat Beziehungen basierend auf der GUID-ID. Ich muß diese an denen ich in dem Generator wie folgt erstellt der int Id wieder anbringen:
//Add relations based on GUID relations
//ForSale:Units
for(ForSale forSale:Globals.getInstance().forSales)
{
if (forSale.getUnitId() != null && forSale.getUnit() == null)
{
for(Unit unit:Globals.getInstance().units)
{
if (forSale.getUnitId().equals(unit.getUnitId()))
{
forSale.setUnit(unit);
break; //only need the first one
}
}
}
}
ich mit zwei Sätzen von Id der Verknüpfung alles am Ende also der int eines für greendao und die Zeichenfolge (GUID) eine, die arbeiten, wenn es zurück auf den Server hochgeladen wird. Muss ein einfacher Weg sein!
Haben Sie schon etwas probiert? – AlexS
@AlexS - Ich habe oben einen Beispielcode hinzugefügt. Irgendwelche Ideen? – BobbyG
Funktioniert das Mapping auch? – AlexS