public class Room {
static belongsTo = [hotel:Hotel]
Source source
long sourceid
RoomType type
float price
float oldPrice
Currency currency
boolean isShown = false
boolean approved = false
static hasMany = [roomTexts:RoomText]
def beforeDelete () {
Photos.withNewSession {
Photos.findAllByRoom(this).each {photosInstance->
photosInstance.delete()
}
}
RoomFeatures.withNewSession {
RoomFeatures.findAllByRoom(this).each {roomF->
roomF.delete()
}
}
}
}
然后:
def room = Room.get(1)
room.delete()
将抛出com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException。
Cannot delete or update a parent row: a foreign key constraint fails (`prod_test`.`photos`, CONSTRAINT `FKC50C8881EC5F6358` FOREIGN KEY (`room_id`) REFERENCES `room` (`id`))
发生这种情况是因为照片删除会话尚未刷新到数据库中,而Hibernate尝试删除Room实体,我认为......
这是房间删除代码:
Room.withTransaction{status->
roomInstance.delete(flush: true)
}
是否有解决此问题的解决方法或“正确方法”? 当然我可以在删除房间之前手动删除所有照片,但使用beforeDelete有助于保持代码清洁并避免代码重复。
答案 0 :(得分:2)
为什么你不能将hasMany列表中的照片与RoomText一起拍照,并使照片属于Room?
答案 1 :(得分:0)
如果照片归房间所有,则不必事先删除它们。只需删除房间,照片就可以了吗?虽然我没有看到Photo和Room之间的关系,但是如果你发布了你的Photo类,也许会更清楚。