我不明白在hibernate映射中的设置中哪些配置不太好。多次插入后,我有更新的链接表包括在一对多的关系.
我不想要这个更新。我认为更新可能与级联或反向关键字有关.
在我的例子中,我有4个类AnalyseResult、VariationResult、Variation & VariationAnnotationNGS。
AnalyseResult可以有许多VariationResults孩子。一个父变异可以有多个VariationResultChildren。变异可以有许多VariationAnnotationNGS儿童。
当我试图插入新的AnalyseResult时,所有的孩子都会做这样的事情
方法@Transactionnal AnalyseResultBo.save() {AnalyseResultDao.save() }
对于每一个新的VariationResult插入,都有一个变化的更新。(变体已经存储(持久化)在DB中,并已被还原到跨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=?发布于 2014-09-07 09:17:35
这是因为您指定了cascade="all",这使操作能够级联到子实体,从而创建额外的update语句。
如果希望防止hibernate对子实体进行级联操作,请在one-to-many set标记中使用以下set
更多信息
Hibernate文档:第7章.集合映射
https://stackoverflow.com/questions/24107326
复制相似问题