gpt4 book ai didi

hibernate : why do i get an update after each insert in one-to-many relationship?

转载 作者:行者123 更新时间:2023-12-02 03:34:58 25 4
gpt4 key购买 nike

我不明白在我的 hibernate 映射中的设置中没有很好地配置什么。
多次插入后,我对包含在一对多关系中的链接表进行了更新。

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

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

AnalyseResult 可以有许多 VariationResults 子项。
一个父 Variation 可以有多个 VariationResultChildren。
Variation 可以有许多 VariationAnnotationNGS 子代。

当我尝试插入新的 AnalyseResult 并附加所有 child 对象时

method annoted @Transactionnal AnalyseResultBo.save() {AnalyseResultDao.save() }



对于每个新的 VariationResult 插入,都有一个 Variation 的更新。 (变化已经存储(持久化)在数据库中并重新附加到 transient 对象 VariationResult。

这是我的映射。我需要更改什么才能在插入后使更新消失?

谢谢
         <!--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>

生成的查询:
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=?

最佳答案

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

如果您希望阻止 hibernate 将操作级联到子实体,请使用以下 cascade="none"在您的 one-to-many set标签

更多信息

Hibernate Documentations: Chapter 7. Collection mapping

关于 hibernate : why do i get an update after each insert in one-to-many relationship?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24107326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com