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

本文介绍了一个关于学生选课系统的案例,在多表关联的情况下如何确保数据的实时同步更新。通过具体示例说明了在进行数据操作后需要手动调用特定方法来同步数据,避免缓存导致的数据不一致问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

     @Entity
public 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;


@Entity
public 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;

@Entity
public 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();

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值