我有 2 个实体,例如汽车和引擎。
每辆车都有一个引擎(至少在这个模型中:)),但并不是每个引擎都内置在汽车中。所以我想要以下表结构:
+------------------------------------+
|CAR |
+------------------------------------+
|id_car INTEGER,PK,AUTOINCREMENT |
|id_engine INTEGER,FK |
+------------------------------------+
+------------------------------------+
|ENGINE |
+------------------------------------+
|id_engine INTEGER,PK,AUTOINCREMENT |
+------------------------------------+
(当然还有更多的列。事实上,我有两个实体,每个实体大约 15 列。但让我们保持简单。)
这可以这样建模:
engine = schema.addEntity("Engine");
Property pkEngine = engine.addLongProperty("id_engine").primaryKey().autoincrement().getProperty();
car = schema.addEntity("Car");
car.addLongProperty("id_car").primaryKey().autoincrement();
Property fkEngine = car.addLongProperty("id_engine").getProperty();
car.addToOne(engine, fkEngine);
但我希望能够从引擎和引擎从汽车查询汽车,并在相应的实体对象上使用吸气剂。为此我补充说:
engine.addToOneWithoutProperty("Car", car, "id_car");
然后我有了我想要的所有吸气剂,但我的表格看起来像这样:
+------------------------------------+
|CAR |
+------------------------------------+
|id_car INTEGER,PK,AUTOINCREMENT |
|id_engine INTEGER,FK |
+------------------------------------+
+------------------------------------+
|ENGINE |
+------------------------------------+
|id_engine INTEGER,PK,AUTOINCREMENT |
|id_car INTEGER |
+------------------------------------+
如果我使用以下语句插入 fk-columns 不一致,因为CAR.id_engine is NULL
,这会导致使用 getter 的异常engine.getCar()
。
Engine engine = new Engine();
mEngineDao.insert(engine);
Car car = new Car();
car.setEngine(engine);
engine.setCar(car);
mCarDao.insert(car);
engine.update();
有没有人建议如何使用 greendao 构建 One2One-Relation,以便每个实体中只有一个外键列和吸气剂?
- -更新 - -
似乎 addToOneWithoutProperty() 无法正常工作。我在生成的部分中找不到void bindValues(SQLiteStatement stmt, Car entity)
关心该列的部分id_engine
。