关于mi英语不好的道歉。我不确定我的项目是否有问题,或者我不了解绿道的工作原理。可能的第二种选择将是正确的。关于greendao实体udpate机制的疑惑
我有以下实体:
Entity review= schema.addEntity("Review");
review.setTableName("reviews");
review.addIdProperty().primaryKey();
Property user_id = review.addLongProperty("user_id").getProperty();
Property object_id= review.addLongProperty("object_id").getProperty();
review.addStringProperty("text");
Index indexUnique = new Index();
indexUnique.addProperty(user_id);
indexUnique.addProperty(object_id);
indexUnique.makeUnique();
review.addIndex(indexUnique);
我使用唯一索引,在田野user_id说明和OBJECT_ID因为我想这两个字段作为主键工作,因为我只希望有每个用户一个回顾和表中的每个对象。
的第一次,我在数据库中插入一个检讨,我请执行下列操作:
MyEntity e=new MyEntity();
e.setText("Hello");
e.setUserId(1);
e.setObjectId(9);
myDao.insert(e);
所有作品一直到那里。下一步是用户更新实体,并使用以下代码:
MyEntity e=new MyEntity();
e.setText("New text");
e.setUserId(1);
e.setObjectId(9);
myDao.insertOrReplaceInTx(e);
而insertOrReplaceInTx方法的工作原理没有例外。当我尝试使用myDao.loadAll()方法加载所有评论时,会出现问题。以下例外出现:
无法从CursorWindow
逐行读取0,0山坳我看看到数据库文件,而问题是,实体被保存到表,但所有的领域都是空的,我不知道为什么。
经过很多测试后,我设法让它工作,执行以下操作。第一次审查时创建的,我也一样:
MyEntity e=new MyEntity();
e.setText("New text");
e.setUserId(1);
e.setObjectId(9);
myDao.insert(e);
后来,如果实体在数据库(编辑操作)已经存在,那么我加载实体,和我做的;
MyEntity e= do a query with greendao and load the entity with user_id=1 and object_id=9//Yes I know that is pseudocode
e.setText("New text");
myDao.update(e);
它的工作原理,但奇怪的是,我不需要调用myDao.update(e);我已经意识到,在e.setText(“New text”)之后,数据库中的字段具有新值。
然后,问题是,是否在不调用dao的更新方法的情况下将字段更改填充到表中?这怎么可能?
提前致谢!