llaves primarias de la cadena greendao - cómo usar

En las preguntas frecuentes de greendao dice "A partir de greenDAO hay un soporte limitado para las claves primarias de cadena".http://greendao-orm.com/documentation/technical-faq/

No puedo encontrar en ningún lugar que diga cómo hacer esto.

Estoy utilizando Guids como mi clave principal en una aplicación de servidor, y quiero poder generar nuevos datos de forma remota desde un dispositivo Android y volver a subirlos al servidor. La base de datos en el dispositivo Android está en sqlite y usa greenDAO para generar POJO y la capa de acceso a datos. Estoy utilizando Guids para evitar colisiones de claves primarias cuando los datos se cargan en el servidor. Estoy almacenando los Guids como cadenas.

Hay algunos consejos más en el sitio web de greendao que dicen que debo crear un campo secundario que contenga la cadena y seguir utilizando la clave principal larga favorecida por greendao, pero esto significa que debo volver a conectar todas mis relaciones de base de datos cuando importo datos desde el servidor. a la aplicación que es un dolor. Preferiría simplemente seguir utilizando las claves primarias de la cadena si eso es posible.

¿Alguien puede decirme cómo hacer esto?

Aquí hay un código de ejemplo ...

En mi generador (he eliminado la mayoría de los campos para mayor claridad):

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

En mi aplicación de Android descargo todos los datos del servidor. Tiene relaciones basadas en los ID de GUID. Tengo que volver a adjuntar estos a los Id. Int que creé en el generador de esta manera:

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

Así que termino teniendo dos conjuntos de Id que enlazan todo, el int para greendao y el string (guid) que funcionará cuando se vuelva a cargar en el servidor. ¡Debe ser una manera más fácil!

Respuestas a la pregunta(1)

Su respuesta a la pregunta