2015-05-29 70 views
0

关于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的更新方法的情况下将字段更改填充到表中?这怎么可能?

提前致谢!

回答