現在、ORMlite から GreenDao に切り替えていますが、greendao でデータベース モデルを作成するのに問題があります。
私のコンテンツは、サーバーが生成された主キーを持つエントリを文字列として識別するサーバーから取得されます。私の内部データベースには、(Android が必要とするように) Long の主キーがあります。
同期するときは、サーバーから配信されたキー (ここでは「backendId」) に基づいてリレーションを作成し、同期を簡単にする必要があります。
ORMlite では、リレーションシップを作成するために使用する列を指定できます。同じことを greendao 用に作成しようとしましたが、失敗しました。
これが私が試したことです:セクターは資産を持つことができます。「assetId」には、アセットの「backendId」に格納されている値が含まれている必要があります。
どうすればそれを達成できるのでしょうか?
Entity asset = schema.addEntity("Asset");
asset.setSuperclass("Backend");
asset.addIdProperty().index();
asset.addStringProperty("backendId").index();
asset.addStringProperty("title");
asset.addStringProperty("description");
asset.addStringProperty("contentType");
asset.addStringProperty("url");
Entity sector = schema.addEntity("Sector");
sector.setSuperclass("Backend");
sector.addIdProperty().index();
sector.addStringProperty("backendId").index();
sector.addStringProperty("title");
sector.addToOne(asset, sector.addLongProperty("asset").getProperty(), "assetId");
// insert test:
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "greenmodel-db", null);
SQLiteDatabase db = helper.getWritableDatabase();
DaoMaster daoMaster = new DaoMaster(db);
DaoSession daoSession = daoMaster.newSession();
AssetDao assetDao = daoSession.getAssetDao();
SectorDao sectorDao = daoSession.getSectorDao();
Asset asset = new Asset(1l, "12345", "Title", "Description", "type", "url");
assetDao.insert(asset);
Sector sector = new Sector();
sector.setTitle("title");
sector.setBackendId("123");
sector.setAssetId(asset);
sectorDao.insert(sector);
その挿入の結果、「assetId」は資産テーブルの主キーですが、「backendId」にする必要があります。
何か案は?