使用Hibernate在单个会话中插入一对多关系表

时间:2015-08-05 13:54:29

标签: mysql hibernate hibernate-mapping

我使用的是Hibernate 3.6.7(Core),我使用的是XML配置 我有One Company Master及其Branch Master表。其中的关系是1对多。我的要求是当我将数据插入公司大师时我也得到了分支列表 在配置文件中,我已经定义了它

<set name="branches" table="m_company_branch" 
                 inverse="true" lazy="true" fetch="select" cascade="all">
            <key>
                <column name="company_id" not-null="true" />
            </key>
            <one-to-many class="com.my.CompanyBranchStructure" />
        </set>

当我插入表时,它只插入主表,即m_company但未提交。但是,我也通过了分支列表。因此我收到错误“批量更新返回.....”,因为它没有获取company_id(分支的外键)。

在阅读了互联网上的一些内容之后,我知道我需要为此目的单独进行插入/提交交易 但后来我无法理解配置文件中的映射 因为它分别处理每个表(记录),所以我也可以不使用一对多或多对多关系。

请指导。

1 个答案:

答案 0 :(得分:1)

我不确定它是否适合您,但在我的情况下,我可以通过使用以下内容来做同样的事情;

在主要表格中(即您所在的公司)

<set name="branches" lazy="false" fetch="select" optimistic-lock="false" cascade="all" >
        <key column="company_id" not-null="true" update="false"/>
        <one-to-many class="com.my.CompanyBranchStructure"  />
        </set>

和辅助表(即CompanyBranchStructure);

<property name="companyId" insert="false" update="false">
            <column name="company_id" />
        </property>

这适用于我的情况。我希望这也能解决你的问题。