GreenDao & 触发奇怪的行为
GreenDao & Triggers strange behaviour
我在我的 android 应用程序中使用 greendao,我需要使用触发器。触发器在插入一些信息后更新字段。
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, toString(), null) {
@Override
public void onCreate(SQLiteDatabase db) {
super.onCreate(db);
db.execSQL("CREATE TRIGGER tg1 AFTER INSERT ON table1 " +
"BEGIN " +
" update tabl1 set info='" + someInfo + "'" +
" where _id=New._id; " +
" END;");
db.execSQL("CREATE TRIGGER tg2 AFTER UPDATE ON table1 " +
"BEGIN " +
" update table1 set info='" + someInfo+ "'" +
" where _id=New._id; " +
" END;");
}
};
daoSession = new DaoMaster(helper.getWritableDatabase()).newSession();
触发器运行良好,当我直接查看 table 中包含的数据时,该字段包含更新的信息。我遇到的问题是,如果我从 table 加载实体,有时我会在该字段中接收数据,有时我会收到空值。
我想这个问题与会话 lyfecicle 有关,也许 greendao 并不总是从 table 加载数据,而是使用已经在内存中的对象。我已经测试过,如果我用 myDao.refresh(entity) 强制刷新一个实体,正确的值就在那里。
但是当我使用列表(原始查询或 loadAll 方法)时,我无法强制刷新实体。
有没有办法强制 green dao 从数据库加载总是最新的信息?
提前致谢。
尝试清除会话。
daoSession.clear();
我在我的 android 应用程序中使用 greendao,我需要使用触发器。触发器在插入一些信息后更新字段。
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, toString(), null) {
@Override
public void onCreate(SQLiteDatabase db) {
super.onCreate(db);
db.execSQL("CREATE TRIGGER tg1 AFTER INSERT ON table1 " +
"BEGIN " +
" update tabl1 set info='" + someInfo + "'" +
" where _id=New._id; " +
" END;");
db.execSQL("CREATE TRIGGER tg2 AFTER UPDATE ON table1 " +
"BEGIN " +
" update table1 set info='" + someInfo+ "'" +
" where _id=New._id; " +
" END;");
}
};
daoSession = new DaoMaster(helper.getWritableDatabase()).newSession();
触发器运行良好,当我直接查看 table 中包含的数据时,该字段包含更新的信息。我遇到的问题是,如果我从 table 加载实体,有时我会在该字段中接收数据,有时我会收到空值。
我想这个问题与会话 lyfecicle 有关,也许 greendao 并不总是从 table 加载数据,而是使用已经在内存中的对象。我已经测试过,如果我用 myDao.refresh(entity) 强制刷新一个实体,正确的值就在那里。
但是当我使用列表(原始查询或 loadAll 方法)时,我无法强制刷新实体。
有没有办法强制 green dao 从数据库加载总是最新的信息?
提前致谢。
尝试清除会话。
daoSession.clear();