我是Hibernate的新手。我有3个表:公司,个人资料和网站。关系是 - 一家公司有很多个人资料和网站(一对多)。
<hibernate-mapping>
<class name="com.bla.dataobject.CompanyData" table="companies">
<id name="companyId" column="company_id">
<generator class="increment"/>
</id>
<property name="name" column="company_name" type="java.lang.String"/>
<property name="description" column="company_information" type="java.lang.String"/>
<set name="sites" table="company_sites" inverse="true" cascade="all-delete-orphan" lazy="false">
<key column="company_id" />
<one-to-many class="com.bla.dataobject.CompanySiteData"/>
</set>
<set name="profiles" table="company_profiles" inverse="true" cascade="all-delete-orphan" lazy="false">
<key column="company_id" />
<one-to-many class="com.bla.dataobject.CompanyProfile"/>
</set>
</class>
<class name="com.bla.dataobject.CompanySiteData" table="company_sites">
<id name="siteId" column="site_id">
<generator class="increment"/>
</id>
<property name="siteProxySettings" column="PROXY_SETTINGS" type="java.lang.String"/>
.................
<property name="siteName" column="SITE_NAME" type="java.lang.String"/>
<many-to-one name="companyData" class="com.bla.dataobject.CompanyData" column="company_id" not-null="true"/>
</class>
<class name="com.bla.dataobject.CompanyProfile" table="company_profiles">
<id name="profileId" column="profile_id">
<generator class="increment"/>
</id>
<property ............./>
<many-to-one name="companyData" class="com.bla.dataobject.CompanyData" column="company_id" not-null="true"/>
</class>
插入和删除工作正常,但不是更新。我的应用程序一侧有Axis2 servlet,另一侧有hibernate。我通过SOAP将公司对象提供给表示层,然后表示层对对象进行更改并请求保留更改(返回的对象内部有hibernate id)。如果我只是更新session.update(object);如果我从db中获取存储公司对象并在2个对象中执行合并(例如删除所有集合并插入接收的集合然后更新原始对象),则集合不会更新(但只有公司平面参数)如果所有集合项都是新的(否则我在已存在的表中的集合名称上获得DB唯一约束)。所以我的问题是: 1.尝试更新“父对象”是否正确,还是需要单独更新所有3个对象? 2.更新集合的正确方法是什么(添加/删除/更新)
我非常感谢代码示例(我没有找到自己)和集合处理。
非常感谢