关闭

教学管理系统-一对多界面处理

标签: hibernateinputmergejoinnull
1759人阅读 评论(1) 收藏 举报
分类:
模型

学院—1——n—班级—1——n—学生

界面

学院—班级:在视图中用TreeViewer进行组织。当用户双击班级时,打开班级的Editor。CollegeClass中的Students采用延迟加载,否则会加载大量的Student对象。

班级—学生:在以FormEditor进行组织。学生列表以TableViewer显示,单击一条,在DetailView中显示学生信息。在EditorInput初始化时,从后台重新加载CollegeClass对象,并取出Student,EJBQL为

from CollegeClass o left join fetch o.students where o.id = :id
关联更新

1.班级对象级联更新学生对象

添加和删除学生对象直接对CollegeClass#List<Student> students字段直接操作。要产生级联更新(删除)的效果,需要添加Hibernate anntotation:

@OneToMany(mappedBy = "collegeClass", cascade = CascadeType.ALL)
@org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
public List<Student> getStudents() 
    return students;
}

编辑学生信息直接merge即可。

2.视图与编辑器之间的关联更新

当用户保存编辑器的修改时,如果班级的名称发生变化需要更新视图中的班级名称显示。由于班级对象在EditorInput已重新加载,即编辑器和视图引用的是两个不同对象,所以需要在EditorInput保存视图传递的班级对象source。在保存时,如果班级名称发生变化,更新到source中。在视图打开编辑器之前,需要先注册监听器,这样当source模型被修改时,视图可以得以通知。

上面的模式感觉不是很好,期待高手指点...

当用户从视图的右键菜单删除一个班级时,需要关闭已打开的编辑器。

private void closeCollegeClassEditor(CollegeClass collegeClass) {
   CollegeClassEditorInput input = new CollegeClassEditorInput(collegeClass);
   IEditorPart editor = this.getSite().getPage().findEditor(input);
   if (editor != null) {
    this.getSite().getPage().closeEditor(editor, false);
  }
}

 

 

 

0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:137926次
    • 积分:2086
    • 等级:
    • 排名:第18248名
    • 原创:62篇
    • 转载:0篇
    • 译文:4篇
    • 评论:47条
    最新评论