greenDao插入数据无效(多表关联)

来源:互联网 发布:iphone移动网络开关 编辑:程序博客网 时间:2024/06/14 21:36

直接说我的案例吧,学生选课,一个学生有多个课,也就是student中有一个List<Course>。因为是多对多的关系,所以建立了第三张表JoinCourseToStudent。

     @Entitypublic class Student {    @Id(autoincrement = true)    Long sid;    String name;    @ToMany    @JoinEntity(            entity = JoinCourseToStudent.class,            sourceProperty = "sid",            targetProperty = "cid"    )    private List<Course> courses;    @ToMany(referencedJoinProperty = "sid")    private List<Score> scores;


@Entitypublic class Course {    @Id(autoincrement = true)    private Long id;    private Long teacherId;    private String name,college,place;    @ToMany    @JoinEntity(            entity = JoinCourseToTime.class,            sourceProperty = "cid",            targetProperty = "tid"    )    private List<Time> times;    @ToMany    @JoinEntity(            entity = JoinCourseToStudent.class,            sourceProperty = "cid",            targetProperty = "sid"    )    private List<Student> students;

@Entitypublic class JoinCourseToStudent {    @Id(autoincrement = true)    private Long id;    private Long cid;    private Long sid;


每次选课的时候提取当前学生的已有课程List<Course>,一一比较当前课是否已选,未选的话则为joinCourseToStudent插入一条数据,与之对应的也就是student的List<Course>增加一条。

然而选完课A之后再次选发现没有提示“当前课程已选”,进一步发现List<Course>没有更新,没有新增的一条Course,退出应用重新加载后才更新。

原因是在多表关联中,比如本案例中一个学生有多个课程,插入数据后当前操作的list并不会更新,即使你重新通过学生获取这个list,也是没有更新的缓存版本,必须手动更新:

student.resetCourses();

每次进行数据后这样将操作的数据与数据库进行同步就可以了。

原创粉丝点击