Primärschlüssel der greendao-Zeichenfolge - Verwendung

In den häufig gestellten Fragen zu greendao heißt es: "Ab greenDAO werden String-Primärschlüssel nur eingeschränkt unterstützt."http://greendao-orm.com/documentation/technical-faq/

Ich kann nirgendwo eine Anleitung finden.

Ich verwende Guids als meinen Primärschlüssel in einer Serveranwendung und möchte in der Lage sein, neue Daten remote von einem Android-Gerät zu generieren und diese zurück auf den Server hochzuladen. Die Datenbank auf dem Android-Gerät ist in SQLite und verwendet GreenDAO, um POJOs und Datenzugriffsschicht zu generieren. Ich verwende Guids, um Primärschlüsselkollisionen beim Hochladen von Daten auf den Server zu vermeiden. Ich speichere die Guids als Strings.

Auf der greendao-Website finden Sie weitere Hinweise, wonach ich ein sekundäres Feld mit der Zeichenfolge erstellen und weiterhin den von greendao bevorzugten langen Primärschlüssel verwenden sollte. Dies bedeutet jedoch, dass ich beim Importieren von Daten vom Server alle meine Datenbankbeziehungen wiederherstellen muss zu der App, die ein Schmerz ist. Möchte viel lieber einfach weiterhin die Zeichenfolge Primärschlüssel verwenden, wenn das möglich ist.

Kann mir jemand sagen, wie das geht?

Hier ist ein Beispielcode ...

In meinem Generator (aus Gründen der Übersichtlichkeit habe ich die meisten Felder entfernt):

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 meiner Android-Anwendung lade ich alle Daten vom Server herunter. Es hat Beziehungen, die auf den GUID-IDs basieren. Ich muss diese mit den int-IDs, die ich im Generator erstellt habe, wie folgt neu verbinden:

            //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
                        }
                    }
                }
            }

Also habe ich am Ende zwei Sätze von IDs, die alles verbinden, den int für greendao und den string (guid), der funktioniert, wenn er zurück auf den Server hochgeladen wird. Muss ein einfacher Weg sein!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage