直接说我的案例吧,学生选课,一个学生有多个课,也就是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();
每次进行数据后这样将操作的数据与数据库进行同步就可以了。