浏览 1543 次
|
锁定老贴子 主题:关于one-to-many中子的修改问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2005-06-28
这里one-to-many中使用了inverse="ture",由子方来进行关系的维护。
Room为父亲,student为儿子。我在更新儿子的时候,利用dynamic-update="true"没有效果,很是郁闷。 所以我每次更新的时候都是全部更新一遍。但是这个时候和父亲Room关联比较难做(我不知道如何做),我是这样写的: [code:1] public void modStudent(Student student, int room_autoid) { Room room = getRoom(room_autoid);//先获得父亲 Student entity = getStudent(student.getAutoid());//获取student的对象实例 ObjectUtils.dto2Entity(student, entity); entity.getRoom().getStudents().remove(entity);//在原来的父亲中remove掉 room.getStudents().add(entity);//加入新的父亲 entity.setRoom(room); baseDao.updateEntity(entity); }[/code:1] 这样可以吗?好象有些烦琐,还有什么更好的方法吗? 这里如果我不remove掉entity,那么父亲的getStudents()就无法维护,大家还有什么好方法吗?这样写太麻烦了。 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2005-06-29
怎么没人回答,是不是我说的可能不够清楚?
比如:现在student的roomid对应Room表的id,表示学生所在的房间号。然后我更新学生信息,这时的这个房间号可能是变化的,也可能是不变化的,所以我必须要更新roomid这个字段。 这个时候父子关系应该如何维护?仅仅一句entity.setRoom(room); 可以吗?感觉关系有些混乱 对了,随便提一句,删除我是这样做的: [code:1] Student student = getStudent(student_autoid); student.getRoom().getStudents().remove(student); baseDao.deleteEntity(student);[/code:1] Hibernate输出三条语句: [code:1]Hibernate: select student0_.autoid as autoid1_, student0_.other as other1_, student0_.name as name1_, student0_.sex as sex1_, student0_.studentid as studentid1_, student0_.roomid as roomid1_, room1_.autoid as autoid0_, room1_.roomdescription as roomdesc2_0_, room1_.roomname as roomname0_ from t_student student0_ left outer join t_room room1_ on student0_.roomid=room1_.autoid where student0_.autoid=? Hibernate: select students0_.autoid as autoid__, students0_.roomid as roomid__, students0_.autoid as autoid0_, students0_.other as other0_, students0_.name as name0_, students0_.sex as sex0_, students0_.studentid as studentid0_, students0_.roomid as roomid0_ from t_student students0_ where students0_.roomid=? Hibernate: delete from t_student where autoid=?[/code:1] |
|
| 返回顶楼 | |
|
最后更新时间:2005-06-29
像你这样情况,最好是采用many-to-one的这种方式。由student去维护
采用one-to-many的确要有几步操作。 第一,解除room-student的关系 第二,重新建立新的room-student的关系 如果你坚持要用one-to-many可以在 room类里加两个方法 addStudent(Student s); removeStudent(Student s); |
|
| 返回顶楼 | |
|
最后更新时间:2005-06-29
终于有人可回答了:)
我的确就是用的many-to-one啊,不是写了已经设置inverse="true"了么。 那就是说我这么写应该是没有问题的了,对吧? 不过感觉还是理解的不深刻。论坛应该找个高人把这些基本技巧写个demo来供大家学习,否则搞来搞去的大部分都是问这个关联方面的问题,我搜到了好多,但是真正解决问题的倒不多。还不如大家一起看个示范程序来得快呢 |
|
| 返回顶楼 | |
|
最后更新时间:2005-06-30
|
|
| 返回顶楼 | |
|
最后更新时间:2005-06-30
这个帖子我早看过了,你看我关于修改的这个代码,就是双向维护的嘛。我只是觉得好象我的修改代码有点麻烦,要先remove再add,不知道有没有更好的办法,hibernate的配置太活了,实在是麻烦呀。
顺便提一句,我本来就是用many-to-one在many端来维护的。 |
|
| 返回顶楼 | |




