论坛首页 Java版 Hibernate

关于one-to-many中子的修改问题

浏览 1543 次
精华帖 (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()就无法维护,大家还有什么好方法吗?这样写太麻烦了。
   
最后更新时间: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]
   
0 请登录后投票
最后更新时间:2005-06-29
像你这样情况,最好是采用many-to-one的这种方式。由student去维护
采用one-to-many的确要有几步操作。
第一,解除room-student的关系
第二,重新建立新的room-student的关系

如果你坚持要用one-to-many可以在
room类里加两个方法
addStudent(Student s);
removeStudent(Student s);
   
0 请登录后投票
最后更新时间:2005-06-29
终于有人可回答了:)
我的确就是用的many-to-one啊,不是写了已经设置inverse="true"了么。
那就是说我这么写应该是没有问题的了,对吧?


不过感觉还是理解的不深刻。论坛应该找个高人把这些基本技巧写个demo来供大家学习,否则搞来搞去的大部分都是问这个关联方面的问题,我搜到了好多,但是真正解决问题的倒不多。还不如大家一起看个示范程序来得快呢
   
0 请登录后投票
最后更新时间:2005-06-30
http://www.javaeye.com/viewtopic.php?t=2633
   
0 请登录后投票
最后更新时间:2005-06-30
这个帖子我早看过了,你看我关于修改的这个代码,就是双向维护的嘛。我只是觉得好象我的修改代码有点麻烦,要先remove再add,不知道有没有更好的办法,hibernate的配置太活了,实在是麻烦呀。

顺便提一句,我本来就是用many-to-one在many端来维护的。
   
0 请登录后投票
论坛首页 Java版 Hibernate

跳转论坛:
JavaEye推荐