GreenDao3.0 中踩到的巨坑:
转载自:my.oschina.net/u/594160/bl…
Entity is detached from DAO context,这个错误log这辈子都不想再看到了。
在GreenDao 使用中 设置了主外键, 主表中的数据插入, 从表中的数据也需要手工插入,不会自动插入
巨坑,但是在查询的时候会查询出来
还有个坑 如果从表数据没有插入, 直接插入主表数据, 在第一次查询的时候会被查出来,正是因为这个原因导致后期出现很多问题。太坑,太坑,太坑。
主要是1V1的ToOne场景设计:
关于ToOne 的注解使用, 使用自定义的fid做关联,主表User中关联一个TaskData.是用户关联一个单一下载任务类。
注意事项:
1、TaskData表和数据需要自己去创建和insert,而User自动关联只是帮你getTaskData对象。不能帮你创建相关数据。
2、所以当你使用user的时候,如果想用他里面的taskData,不层insert过,就会报错Entity is detached from DAO context。正确的方式是通过fid是否为空,判断当前业务中是否已经创建了TaskData
3、进一步明确数据创建关系,一般业务是先创建User对象。 如果有了TaskData的创建场景,这时候需要TaskData taskData = new TaskData(); ......taskData.insert(),去插入数据,然后这时候自定递增的主键taskData.fid需要赋值给,user.fid. 这样,后续User就会依靠fid去关联到 taskData,后续只要fid不为空,user.getTaskData就永远有值了。
使用了三方库就要遵循人家的规矩,否则只能自认倒霉,自己浪费时间。
****别走野路子,管杀不管埋****注意,严谨使用User的主键ID直接作为fid外键,否则你会走入无限死循环,id莫名其妙的小事,莫名Entity is detached from DAO context,崩溃的死循环。*********