greendao string chaves primárias - como usar
No FAQ do greendao, diz "A partir do greenDAO, há suporte limitado para as chaves primárias do String".http://greendao-orm.com/documentation/technical-faq/
Eu não consigo encontrar em qualquer lugar que diz como fazer isso.
Eu estou usando Guids como minha chave primária em um aplicativo de servidor e quero ser capaz de gerar novos dados remotamente a partir de um dispositivo Android e enviá-lo de volta para o servidor. O banco de dados no dispositivo Android está em sqlite e usa o greenDAO para gerar POJOs e camada de acesso a dados. Eu estou usando Guids para evitar colisões de chave primária quando os dados são enviados para o servidor. Eu estou armazenando os Guids como seqüências de caracteres.
Há mais alguns conselhos sobre o site greendao que dizem que eu deveria criar um campo secundário segurando a string e ainda usar a chave primária longa favorecida pelo greendao, mas isso significa que eu tenho que reconectar todos os meus relacionamentos de banco de dados quando eu importar dados do servidor para o aplicativo que é uma dor. Preferiria apenas continuar a usar as chaves primárias da cadeia se isso for possível.
Alguém pode me dizer como fazer isso?
Aqui está algum código de exemplo ...
No meu gerador (eu removi a maioria dos campos para maior clareza):
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;
}
Na minha aplicação android eu baixar todos os dados do servidor. Tem relacionamentos baseados nos IDs do GUID. Eu tenho que recolocá-los para os id's que eu criei no gerador assim:
//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
}
}
}
}
Então eu acabo tendo dois conjuntos de Ids ligando tudo, o int para o greendao e o string (guid) que funciona quando é enviado de volta para o servidor. Deve ser um jeito mais fácil!