Zhe*_*nch 5 mapping hibernate insert updates
我不明白我的休眠映射设置中哪些配置不正确。\n插入后很多次,我对包含在一对多关系中的链接表进行了更新。
\n\n我不想要这个更新。\n我认为更新可能与级联或反向关键字有关......
\n\n在我的示例中,我有 4 个类 AnalyseResult、VariationResult、Variation 和 VariationAnnotationNGS。
\n\nAnalyseResult 可以有许多 VariationResults 子级。\n一个父 Variation 可以有多个 VariationResultChildren。\nVariation 可以有许多 VariationAnnotationNGS 子项。
\n\n当我尝试插入新的 AnalyseResult 并附加所有子对象时,执行类似的操作
\n\n\n\n\n方法注释@Transactionnal\n AnalyseResultBo.save() {AnalyseResultDao.save() }
\n
对于每个新的 VariationResult 插入,都会更新 Variation。(变化已经存储(持久化)在数据库中并重新附加到瞬态对象 VariationResult。
\n\n这是我的映射。我需要更改什么才能使更新在插入后消失?
\n\n谢谢
\n\n <!--AnalyseResult -->\n <class name="com.clb.genomic.lyon.model.analysis.AnalyseResult" table="CORE_analyseResult" >\n\n <set name="ngsVariationResults" table="NGS_variationResult" inverse="true" lazy="true" cascade="all">\n <key>\n <column name="id_analyseResult_fk" not-null="true" />\n </key> \n <one-to-many class="com.clb.genomic.lyon.model.ngs.VariationResultNGS" />\n </set>\n\n </class>\n\n <!--VariationResultNGS -->\n <class name="com.clb.genomic.lyon.model.ngs.VariationResultNGS" table="NGS_variationResult" >\n\n <many-to-one name="analyseResult" class="com.clb.genomic.lyon.model.analysis.AnalyseResult" cascade="all" >\n <column name="id_analyseResult_fk" not-null="true" /> \n </many-to-one>\n\n <many-to-one name="variation" class="com.clb.genomic.lyon.model.ngs.VariationNGS" cascade="all" > <!-- cascade="all" enlever \xc3\xa9vite le update mais fait foire le insert completement-->\n <column name="id_variation_fk" not-null="true" /> \n </many-to-one> \n\n </class>\n\n <!--Variation-->\n <class name="com.clb.genomic.lyon.model.ngs.VariationNGS" table="NGS_variation" >\n\n <set name="variationAnnotations" table="NGS_variationAnnotationEav" inverse="true" lazy="false" cascade="all">\n <key>\n <column name="id_variation_fk" not-null="true" />\n </key> \n <one-to-many class="com.clb.genomic.lyon.model.ngs.VariationAnnotationNGS" />\n </set>\n\n <set name="variationResults" table="NGS_variationResult" inverse="true" lazy="true" cascade="all">\n <key>\n <column name="id_variation_fk" not-null="true" />\n </key> \n <one-to-many class="com.clb.genomic.lyon.model.ngs.VariationResultNGS" />\n </set>\n\n </class>\n\n <!--VariationAnnotationNGS -->\n <class name="com.clb.genomic.lyon.model.ngs.VariationAnnotationNGS" table="NGS_variationAnnotationEav" >\n\n <many-to-one name="variation" class="com.clb.genomic.lyon.model.ngs.VariationNGS" cascade="all">\n <column name="id_variation_fk" not-null="true" /> \n </many-to-one> \n\n </class>\n\n</hibernate-mapping>\nRun Code Online (Sandbox Code Playgroud)\n\n生成的查询:
\n\nHibernate: 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 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n\nHibernate: 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 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n\nHibernate: update NGS_variation set nucleotide_change=?, aminoAcid_Change=?, ref=?, alt=?, chr=?, position=?, strand=?, analyseDict_version=? where id=?\n\nHibernate: update NGS_variation set nucleotide_change=?, aminoAcid_Change=?, ref=?, alt=?, chr=?, position=?, strand=?, analyseDict_version=? where id=?\nRun Code Online (Sandbox Code Playgroud)\n
这是因为您指定cascade="all"这使得操作能够级联到子实体,从而创建额外的更新语句。
如果您希望防止 hibernate 对子实体进行级联操作,请在标签cascade="none"中使用以下内容one-to-many set
更多信息
| 归档时间: |
|
| 查看次数: |
3623 次 |
| 最近记录: |