問題: greenDao を使用して、gson で作成された ID のないオブジェクトをデータベースに挿入できません
GreenDao のセットアップ
私のWebサービスはこのような出力を返します
[
{
id: 2,
firstName: "John",
lastName: "Cleese",
dateOfBirth: -952473600,
profession: {
name: "Actor",
description: "TV show entertainer"
}
}
]
Gson
これをPerson
オブジェクトを持つオブジェクトに変換しProfession
ます。これらのクラスは、GreenDao Generator
.
Schema schema = new Schema(SCHEMA_VERSION, "com.example.dao");
Entity profession = schema.addEntity("Profession");
profession.addIdProperty().autoincrement().notNull();
profession.addStringProperty("name");
profession.addStringProperty("description");
Entity person = schema.addEntity("Person");
person.addIdProperty();
person.addStringProperty("firstName");
person.addStringProperty("lastName");
person.addDateProperty("dateOfBirth");
Property professionProperty = person.addLongProperty("profession_id").getProperty();
person.addToOne(profession, professionProperty);
new DaoGenerator().generateAll(schema, "my/path/java");
問題を挿入:
今、私は作成されたPerson
オブジェクトとそのProfession
オブジェクトを次のように挿入しようとしています:
DaoMaster master = new DaoMaster(devOpenHelper.getWritableDatabase());
DaoSession session = master.newSession();
PersonDao personDao = session.getPersonDao();
List<Person> people = myWebServiceResponse.getPeople();
ProfessionDao professionDao = session.getProfessionDao();
personDao.insertOrReplaceInTx(people);
for (Person person : people) {
try {
professionDao.insertInTx(person.getProfession());
} catch (Exception e) {
Log.e("MainActivity", "Issue on insert: " + e.getMessage());
}
}
は次のperson.getProfession()
例外をスローします: null オブジェクト参照で仮想メソッド 'long com.example.dao.Profession.getId()' を呼び出しようとしました
Profession
最初にオブジェクトを挿入してからオブジェクトを挿入することで、状況を好転させると、同じ呼び出しで Entity is detached from DAO context がPerson
スローされますperson.getProfession()