浏览 2438 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2004-03-09
winterchipmunk 写道 <hibernate-mapping>
<class name="User"> ..... <set name="addresses" table="Address" inverse="true" cascade="all"> <key column="userid"/> <one-to-many class="Address" /> </set> </class> <class name="Address"> ..... <many-to-one name="user" class="User" column="userid"/> </class> </hibernate-mapping> 谢谢你! 还有一个问题没想通,只好再麻烦你了 :) 原来User里面包含的Address就是他的Primary Address, 这样Create 或 Update 的时候, user 的 addressId 会自动被update. 现在这样就只能手工set,然后再update user了是吗? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2004-03-09
能对你有帮助,太好了,不过我不大明白你的意思,什么叫自动修改?
|
|
返回顶楼 | |
发表时间:2004-03-09
啊!:)谢谢~
我基本已经想明白了。 现在的设计与原来的区别就在于他体现出了user 和 address之间的一对多关系。其它是一样的。 所以save 一个 user 仍然需要在3个sql语句完成。 Hibernate的id是在实际数据库操作的时候才产生的么? 能不能先让Hibernate把user 和 address 的 id产生好了,赋给对象,再执行insert语句? |
|
返回顶楼 | |
发表时间:2004-03-09
如果你在配置文件里,配置了id的generator,那么hibernate就自动为你生成主键。这个主键好象是在执行save的时候,生成的。
你不需要写任何sql,只要实例化user和它的n个address,并且将address添加给user的address的set,就可以了。 |
|
返回顶楼 | |
发表时间:2004-03-09
我明白,我的意思是在持久化user的时候,并不知道primary adress的id
那么 user 里 m_curAddrId 就不得不是空的。 只有等address对象也持久化了,得到了id 再set给user,然后再update user,对不? 在这个mapping 中,Hibernate 只会维护address table 里的 userid 而对user table里的 m_curAddrId 就只能手工维护了。(因为映射里没有提到他和address的关系) 归根结底,还是这个当前地址在捣乱。 |
|
返回顶楼 | |
发表时间:2004-03-09
withwind 写道 我明白,我的意思是在持久化user的时候,并不知道primary adress的id
那么 user 里 m_curAddrId 就不得不是空的。 只有等address对象也持久化了,得到了id 再set给user,然后再update user,对不? 在这个mapping 中,Hibernate 只会维护address table 里的 userid 而对user table里的 m_curAddrId 就只能手工维护了。(因为映射里没有提到他和address的关系) 归根结底,还是这个当前地址在捣乱。 对,是这样的。但是其实并不麻烦,你只要在commit以后,refresh()一下就可以了,不要再写sql什么的:) |
|
返回顶楼 | |
发表时间:2004-03-09
这回基本明白了!谢谢你的指导!:)
经过这次讨论,觉得对概念的感受强多了。 刚刚看了一篇关于映射关系的文章,讲得很透彻, 但对于我的Case,这应该已经是标准答案了。 |
|
返回顶楼 | |