首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate :为什么我要在一对多的关系中每次插入之后得到一个更新?

Hibernate :为什么我要在一对多的关系中每次插入之后得到一个更新?
EN

Stack Overflow用户
提问于 2014-06-08 14:50:56
回答 1查看 2.9K关注 0票数 4

我不明白在hibernate映射中的设置中哪些配置不太好。多次插入后,我有更新的链接表包括在一对多的关系.

我不想要这个更新。我认为更新可能与级联或反向关键字有关.

在我的例子中,我有4个类AnalyseResult、VariationResult、Variation & VariationAnnotationNGS。

AnalyseResult可以有许多VariationResults孩子。一个父变异可以有多个VariationResultChildren。变异可以有许多VariationAnnotationNGS儿童。

当我试图插入新的AnalyseResult时,所有的孩子都会做这样的事情

方法@Transactionnal AnalyseResultBo.save() {AnalyseResultDao.save() }

对于每一个新的VariationResult插入,都有一个变化的更新。(变体已经存储(持久化)在DB中,并已被还原到跨VariationResult对象)。

这是我的地图。在插入后,需要更改哪些内容才能删除更新?

谢谢

代码语言:javascript
复制
         <!--AnalyseResult -->
        <class name="com.clb.genomic.lyon.model.analysis.AnalyseResult" table="CORE_analyseResult"  >

          <set name="ngsVariationResults" table="NGS_variationResult"  inverse="true" lazy="true"  cascade="all">
               <key>
               <column name="id_analyseResult_fk" not-null="true"  />
               </key> 
               <one-to-many class="com.clb.genomic.lyon.model.ngs.VariationResultNGS" />
          </set>

         </class>

      <!--VariationResultNGS -->
      <class name="com.clb.genomic.lyon.model.ngs.VariationResultNGS" table="NGS_variationResult" >

         <many-to-one name="analyseResult" class="com.clb.genomic.lyon.model.analysis.AnalyseResult" cascade="all" >
            <column name="id_analyseResult_fk" not-null="true" /> 
        </many-to-one>

        <many-to-one name="variation" class="com.clb.genomic.lyon.model.ngs.VariationNGS"  cascade="all" > <!-- cascade="all" enlever évite le update mais fait foire le insert completement-->
            <column name="id_variation_fk" not-null="true" /> 
        </many-to-one>       

       </class>

       <!--Variation-->
       <class name="com.clb.genomic.lyon.model.ngs.VariationNGS" table="NGS_variation" >

       <set name="variationAnnotations" table="NGS_variationAnnotationEav"  inverse="true" lazy="false"  cascade="all">
            <key>
                <column name="id_variation_fk" not-null="true"  />
            </key> 
            <one-to-many class="com.clb.genomic.lyon.model.ngs.VariationAnnotationNGS" />
        </set>

         <set name="variationResults" table="NGS_variationResult"  inverse="true" lazy="true" cascade="all">
            <key>
                <column name="id_variation_fk" not-null="true"  />
            </key> 
            <one-to-many class="com.clb.genomic.lyon.model.ngs.VariationResultNGS" />
        </set>

     </class>

     <!--VariationAnnotationNGS -->
     <class name="com.clb.genomic.lyon.model.ngs.VariationAnnotationNGS" table="NGS_variationAnnotationEav" >

       <many-to-one name="variation" class="com.clb.genomic.lyon.model.ngs.VariationNGS" cascade="all">
            <column name="id_variation_fk" not-null="true" /> 
        </many-to-one> 

     </class>

</hibernate-mapping>

生成的查询:

代码语言:javascript
复制
Hibernate: insert into NGS_variationResult (id_analyseResult_fk, id_variation_fk, shift, shift_confiance, shift_type, coverage, a_obs, c_obs, g_obs, t_obs, filter_tool, filter_custom, is_automat_valid, is_research_valid, is_clinic_valid, comment) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

Hibernate: insert into NGS_variationResult (id_analyseResult_fk, id_variation_fk, shift, shift_confiance, shift_type, coverage, a_obs, c_obs, g_obs, t_obs, filter_tool, filter_custom, is_automat_valid, is_research_valid, is_clinic_valid, comment) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

Hibernate: update NGS_variation set nucleotide_change=?, aminoAcid_Change=?, ref=?, alt=?, chr=?, position=?, strand=?, analyseDict_version=? where id=?

Hibernate: update NGS_variation set nucleotide_change=?, aminoAcid_Change=?, ref=?, alt=?, chr=?, position=?, strand=?, analyseDict_version=? where id=?
EN

回答 1

Stack Overflow用户

发布于 2014-09-07 09:17:35

这是因为您指定了cascade="all",这使操作能够级联到子实体,从而创建额外的update语句。

如果希望防止hibernate对子实体进行级联操作,请在one-to-many set标记中使用以下set

更多信息

Hibernate文档:第7章.集合映射

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24107326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档