使用 Hibernate 在单个会话中插入一对多关系表
Inserting to One to Many Relational tables in Single Session Using Hibernate
我正在使用 Hibernate 3.6.7(核心)并且我正在使用 XML 配置。
我有一个 Company Master 和它的 Branch Master table。其中的关系是一对多。我的要求是,当我将数据插入 Company Master 时,我也得到了分支机构列表。
在配置文件中,我定义了它
<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>
当我插入到 table 时,它只插入到主 table,即 m_company 但未提交。但是,我也通过了分支列表。因此我得到一个错误 "Batch update returns....." 因为它没有得到 company_id (分支的外键)。
看了网上的一些内容,才知道需要单独Insert/Commit交易才行。
但是我无法理解配置文件中的映射。
由于它单独处理每个 table (记录),我可以在不使用一对多或多对多关系的情况下做同样的事情。
请多指教
我不确定它是否适合你,但就我而言,我可以通过使用以下方法来做同样的事情;
小学 table(即您的公司)
<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>
中学 table(即 CompanyBranchStructure);
<property name="companyId" insert="false" update="false">
<column name="company_id" />
</property>
这对我来说很有效。我希望这也能解决您的问题。
我正在使用 Hibernate 3.6.7(核心)并且我正在使用 XML 配置。
我有一个 Company Master 和它的 Branch Master table。其中的关系是一对多。我的要求是,当我将数据插入 Company Master 时,我也得到了分支机构列表。
在配置文件中,我定义了它
<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>
当我插入到 table 时,它只插入到主 table,即 m_company 但未提交。但是,我也通过了分支列表。因此我得到一个错误 "Batch update returns....." 因为它没有得到 company_id (分支的外键)。
看了网上的一些内容,才知道需要单独Insert/Commit交易才行。
但是我无法理解配置文件中的映射。
由于它单独处理每个 table (记录),我可以在不使用一对多或多对多关系的情况下做同样的事情。
请多指教
我不确定它是否适合你,但就我而言,我可以通过使用以下方法来做同样的事情;
小学 table(即您的公司)
<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>
中学 table(即 CompanyBranchStructure);
<property name="companyId" insert="false" update="false">
<column name="company_id" />
</property>
这对我来说很有效。我希望这也能解决您的问题。