我想在同一事务中以级联方式保存对象列表。
AnalyseDispatcherBO.save(analyseDispatcher).
业务方法使用@Transaction批注进行注释。
Hibernate告诉我,当涉及InputFile对象时,对象是trancsient并且不想保存。如何在不对所有对象的事务包装器中进行多次保存的情况下解决该问题。我想保存我的分析并通过级联传播链接对象的所有插入。
我的架构如下: AnalyseDispatcher - >输入文件(N - N) 输入文件 - > LibraryLane(N-N) LibraryLane - >库(N-1) LibraryLane - >车道(N-1) Lane - >跑(N-1)
如果需要,我可以给表格模式和约束,但它会产生很多代码。
感谢您的帮助。
12:34:15,175 WARN UnresolvedEntityInsertActions:163 - HHH000437: 尝试保存一个或多个具有不可为空的实体 与未保存的瞬态实体的关联。未保存的瞬态 在保存这些依赖项之前,必须将实体保存在操作中 实体。未保存的瞬态实体: ([com.clb.genomic.lyon.model.Library#])从属实体: ([[com.clb.genomic.lyon.model.LibraryLane#]])不可为空 association(s):( [com.clb.genomic.lyon.model.LibraryLane.library]) 12:34:15,175 WARN UnresolvedEntityInsertActions:163 - HHH000437: 试图保存一个或多个具有非可空的实体 与未保存的瞬态实体的关联。未保存的瞬态 在保存这些依赖项之前,必须将实体保存在操作中 实体。未保存的瞬态实体: ([com.clb.genomic.lyon.model.Lane#])从属实体: ([[com.clb.genomic.lyon.model.LibraryLane#]])不可为空 协会:([com.clb.genomic.lyon.model.LibraryLane.lane]) 线程“main”中的异常 org.hibernate.TransientPropertyValueException:非null属性 引用瞬态值 - 必须先保存瞬态实例 当前的操作
AnalyseDispatcher.hbm.xml:
<set name="inputFiles" table="CORE_analyseDispatcher_inputFile" inverse="true" cascade="all" fetch ="join">
<key>
<column name="id_analyse_fk" not-null="true" />
</key>
<many-to-many entity-name="com.clb.genomic.lyon.model.InputFile">
<column name="id_inputFile_fk" not-null="true" />
</many-to-many>
</set>
InputFile.hbm.xml:
<set name="analyses" table="CORE_analyseDispatcher_inputFile" inverse="true" fetch="join" cascade="all" >
<key>
<column name="id_analyse_fk" not-null="true" />
</key>
<many-to-many entity-name="com.clb.genomic.lyon.model.InputFile">
<column name="id_inputFile_fk" not-null="true" />
</many-to-many>
</set>
<set name="libraryLanes" table="CORE_libraryLane_file" inverse="true" fetch="join" cascade="all" >
<key>
<column name="id_inputFile_fk" not-null="true" />
</key>
<many-to-many entity-name="com.clb.genomic.lyon.model.LibraryLane">
<column name="id_library_lane_fk" not-null="true" />
</many-to-many>
</set>
LibraryLane.hbm.xml:
<many-to-one name="lane" class="com.clb.genomic.lyon.model.Lane" >
<column name="id_lane_fk" not-null="true" />
</many-to-one>
<many-to-one name="library" class="com.clb.genomic.lyon.model.Library" >
<column name="id_library_fk" not-null="true" />
</many-to-one>
<set name="inputFiles" table="CORE_inputFile" inverse="false" fetch="join" cascade="all" >
<key>
<column name="id_library_lane_fk" not-null="true" />
</key>
<many-to-many entity-name="com.clb.genomic.lyon.model.InputFile">
<column name="id_inputFile_fk" not-null="true" />
</many-to-many>
</set>
Lane.hbm.xml:
<many-to-one name="run" class="com.clb.genomic.lyon.model.Run" >
<column name="id_run_fk" not-null="true" />
</many-to-one>
<set name="libraryLanes" table="NGS_libraryLane" inverse="true" fetch="join" cascade="all" >
<key>
<column name="id_lane_fk" not-null="true" />
</key>
<one-to-many class="com.clb.genomic.lyon.model.LibraryLane" />
</set>
Library.hbm.xml:
<set name="libraryLanes" table="NGS_libraryLane" inverse="true" fetch="join" cascade="all">
<key>
<column name="id_library_fk" not-null="true" />
</key>
<one-to-many class="com.clb.genomic.lyon.model.LibraryLane" />
</set>
Run.hbm.xml:
<set name="lanes" table="NGS_lane" inverse="true" fetch="join" cascade="all">
<key>
<column name="id_run_fk" not-null="true" />
</key>
<one-to-many class="com.clb.genomic.lyon.model.Lane"/>
</set>