论坛首页 Java企业应用论坛

winterchipmunk, 谢谢你给的代码

浏览 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了是吗?
   发表时间:2004-03-09  
能对你有帮助,太好了,不过我不大明白你的意思,什么叫自动修改?
0 请登录后投票
   发表时间:2004-03-09  
啊!:)谢谢~
我基本已经想明白了。

现在的设计与原来的区别就在于他体现出了user 和 address之间的一对多关系。其它是一样的。

所以save 一个 user 仍然需要在3个sql语句完成。

Hibernate的id是在实际数据库操作的时候才产生的么?
能不能先让Hibernate把user 和 address 的 id产生好了,赋给对象,再执行insert语句?
0 请登录后投票
   发表时间:2004-03-09  
如果你在配置文件里,配置了id的generator,那么hibernate就自动为你生成主键。这个主键好象是在执行save的时候,生成的。

你不需要写任何sql,只要实例化user和它的n个address,并且将address添加给user的address的set,就可以了。
0 请登录后投票
   发表时间: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的关系)

归根结底,还是这个当前地址在捣乱。
0 请登录后投票
   发表时间: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什么的:)
0 请登录后投票
   发表时间:2004-03-09  
这回基本明白了!谢谢你的指导!:)
经过这次讨论,觉得对概念的感受强多了。

刚刚看了一篇关于映射关系的文章,讲得很透彻,
但对于我的Case,这应该已经是标准答案了。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics