greendaoのFAQでは、「greenDAOから始まり、文字列の主キーのサポートが限られています。 http://greendao-orm.com/documentation/technical-faq/greendaoの文字列の主キー - 使用方法
私はどのようにこれを行う方法を見つけることができません。
サーバーアプリケーションで主キーとしてGuidsを使用しています。アンドロイドデバイスから新しいデータをリモートで生成し、サーバーにアップロードできるようにしたいと考えています。アンドロイドデバイスのデータベースはsqliteにあり、greenDAOを使用してPOJOとデータアクセス層を生成します。私はデータがサーバーにアップロードされるとき、主キーの衝突を避けるためにGuidsを使用しています。私はGuidsを文字列として保存しています。
greendaoのウェブサイトには、文字列を保持する2次フィールドを作成し、greendaoが優先する長い主キーを使用する必要があるとのアドバイスがありますが、インポート時にすべてのデータベース関係を再接続する必要があるサーバからアプリケーションへのデータは痛みです。可能であれば、文字列の主キーを使用し続けるほうがずっとです。
どのようにすればいいですか?
ここではいくつかのサンプルコードがある...私の発電機で
(私は明確にするためのフィールドのほとんどを削除しました):私のアンドロイドアプリケーションで
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;
}
私はすべてのデータをダウンロードしますサーバ。それはGUIDのIDに基づいて関係を持っています。私は、IDの私はこのような発電機で作成されたintにこれらを再接続する必要があります。
//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
}
}
}
}
だから私は、IDのリンクはすべて、greendaoと文字列のint型1(GUID)意志1の2セットを持って終了しますそれがサーバーにアップロードされると動作します。簡単な方法でなければならない!
既に試しましたか? – AlexS
@AlexS - 上記のサンプルコードをいくつか追加しました。何か案は? – BobbyG
マッピングも同様に機能しますか? – AlexS