在hibernate一对多映射关系中,总是报错:
二月 09, 2018 3:55:39 下午 org.hibernate.internal.ExceptionMapperStandardImpl mapManagedFlushFailure
ERROR: HHH000346: Error during managed flush [org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.zc.Student]
二月 09, 2018 3:55:39 下午 org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl release
INFO: HHH000010: On release of batch it still contained JDBC statements
经过查询资料后发现,在实体类配置文件中,set元素的cascade属性默认是lazy但是在数据库里保存数据的时候,没有手动保存many的一方,就会出错,应该先保存,many的一方,才能保存one的一方,如果把cascade设置成为all。这样就不会有问题了。
错误的写法:
<set name="students" table="student">
<!-- 指定关联的外键列 -->
<key>
<column name="gid" />
</key>
<one-to-many class="com.zc.Student" />
</set>
正确的写法:
<set name="students" table="student" cascade="all">
<!-- 指定关联的外键列 -->
<key>
<column name="gid" />
</key>
<one-to-many class="com.zc.Student" />
</set>