酒店和参照物是一对多的关系:
<set name="tbBuildings" inverse="false" cascade="all-delete-orphan">
<key>
<column name="hotel_id" not-null="true" />
</key>
<one-to-many class="com.TbBuilding" />
</set>
删除某个酒店时,应该级联删除掉与它关联的参照物。
删除的时候,报出了错误,如下:
java.sql.BatchUpdateException: Column 'hotel_id' cannot be null
因为Hibernate在删除参照物前会先执行如下一条语句:
update clientmanager.tb_building set hotel_id=null where hotel_id=?
这样,由于参照物中酒店id的外不能为空,所以报出了错误。
解的办法:
将上面的inverse="false" 改为inverse="true" , 如此,则不会报错了。
因为这样设置后,不再执行这一条更新的语句,而是直接执行删除语句。
即:不会在删除前先把参照物的hotel_id设为null值,而是直接删除参照物。