one-to-many关系的更新问题
来源:互联网 发布:方正字库 mac 编辑:程序博客网 时间:2024/04/30 11:00
- 学生实体
- <set
- name="selectclasses"
- lazy="false"
- inverse="true"
- cascade="all"
- sort="unsorted"
- >
- <key
- column="studentid"
- >
- </key>
- <one-to-many
- class="hemis.dao.model.hibernate.StudentCourse"
- />
- </set>
- 选课实体
- <many-to-one
- name="student"
- class="hemis.dao.model.hibernate.Student"
- cascade="none"
- outer-join="auto"
- update="true"
- insert="true"
- access="property"
- column="studentid"
- />
在one这边来控制及联操作,在update一个学生实体时新加入的选课实体存入数据库中,但是以前的旧的选课实体还是保留在数据库中。举个例子来说:一个学生以前选了“环境学”和“生物学”两个课程,现在这两门课都通过了,又选了“数学”和“物理”,因此需要更新学生的选课信息,删除过去的选课,加入现在的选课。
我要达到的目的是:在及联更新“学生”实体信息时,hibernate能否自动的清除在many这端的所有旧的信息,之后再存入新的“选课”实体。
首先,你这个关系没有搞清楚吧,学生和课程应该是多对多的关系,而不是一对多的关系吧。多对多的关系的这个关系表是由Hibernate来维护的,因此,你不必考虑关系的维护了。
其次,你要明白,多对多的关系,不需要每次对都他们的关系进行操作,你可以不进行关系的操作,比如:你可以不进行student.setCourse(set)这样的类似操作,这是根据你的需要来定的。
最后,根据你的需要,我看你可以只对关系进行维护,不必对“学生”表进行操作,你直接可以对关系进行维护。比如:你可更新一个学生对课程的关系。
student.setCourse(null);
student.getCourse().add(course1);
student.getCourse().add(course2);
session.saveOrUpdate(student);
谢谢楼上的回复。
没错常理上大多数人都会认为学生和课程是many-to-many的关系,我的例子可能不恰当。
其实我针对的不是学生和课程的关系,而是one-to-many的关系,假如换成班主任和学生的关系,这二者购建成one-to-many应该没问题吧,一个班主任领导多名学生,一个学生只能从属于一个班主任。
假设:teacher代表教师实体,student代表学生实体,studentSet表示教师拥有的所有学生集合。
假如现在这个班的学生都毕业了,班主任要重新领导一个班了,此时必然要更新teacher实体的studentSet,一种办法是先显示的(用循环)把所有旧班的学生都删除,再购建一个新班的集合赋给teacher,再调用update(teacher)更新教师的信息。
我的问题是:能不能不用显示的删除旧学生的信息,直接通过改变studentSet,用一条update(teacher)语句就完成相同的工作。
我现在的代码如下:
- DAO dao= (DAO); BeanFactory.getBean("dao");;
- Teacher teacher = dao.getTeacherById(teacherId);;
- Object[] studentSet = teacher.getStudentSet();.toArray();;
- for(int i=0;i<studentSet.length;i++);{
- dao.remove(studentSet[i]);;
- }
- teacher.getStudentSet();.clear();;
- Set newStudentSet = new HashSet();;
- //将新学生加入newStudentSet中
- teacher.setStudentSet(newStudentSet);;
- dao.update(teacher);;
这样的话能够达到效果,可是我把for循环去掉:
- DAO dao= (DAO); BeanFactory.getBean("dao");;
- Teacher teacher = dao.getTeacherById(teacherId);;
- Object[] studentSet = teacher.getStudentSet();.toArray();;
- teacher.getStudentSet();.clear();;
- Set newStudentSet = new HashSet();;
- //将新学生加入newStudentSet中
- teacher.setStudentSet(newStudentSet);;
- dao.update(teacher);;
这样以前的旧班级删不掉!后面的方法有什么问题吗?难道必须用一个循环显示的删除旧信息吗?
- one-to-many关系的更新问题
- Hibernate one-to-many && many-to-many 的关系映射
- hibernate连接sqlserver2000问题的解决(父子关系同时保存时发生 one-to-many & many-to-one)
- 用我的MyGeneration模板生成NHibernate映射文件和关系(one-to-one,one-to-many,many-to-many)
- 我的MyGeneration模板生成NHibernate映射文件和关系(one-to-one,one-to-many,many-to-many)
- NHibernate(one-to-many)的问题
- Nhibernate Many-to-one 的配置问题
- Hibernate one-to-many / many-to-one关系映射
- Hibernate one-to-many / many-to-one关系映射
- Hibernate使用property-ref属性解决遗留数据库One To Many关系的问题。
- Hibernate使用property-ref属性解决遗留数据库One To Many关系的问题。
- Hibernate中many-to-one关系的编写
- Hibernate中many-to-one关系的编写
- Hibernate中many-to-one关系的编写
- Entity Framework 实体关系总结:one-to-one, one-to-many, many-to-many
- Entity Framework 实体关系总结:one-to-one, one-to-many, many-to-many
- 码农小汪-Hibernate学习4-关联关系映射many-to-one,many-to-one,one-to-many
- NHibernate学习笔记(三):many-to-one/one-to-many/many-to-many关系映射
- 地图引擎rmaps android 源码(rmaps source code)
- 最大公约数和最小公倍数
- Android瀑布流照片墙实现
- c++ explicit含义
- 软件培训机构的网络营销那点事儿
- one-to-many关系的更新问题
- AES 加密 文件 asp.net 版
- java中的动态绑定和静态绑定
- 服务器推送技术comet(AJAX长轮询)
- Tcpdump命令详解
- 有关python给类绑定方法
- 怎样解决putty终端乱码的方法
- MySQL 在ubuntu12.04LTS 本地可以连接,远程连接不上的解决
- 黑马程序员-java面向对象的概念及封装总结