我有一个引用存储在文件系统上的图像的图像实体(Spring Roo / JPA)。当从持久存储中删除图像实体时,我很想删除这些文件。
我可以在每个 Image 实体上编写一个手动remove()
方法,使其删除自身及其引用的文件,但这仅在使用该方法手动删除图像时才有效。显然,当删除拥有实体或通过调用它删除图像时级联删除图像时,它不会触发entityManager.remove()
。
从数据库中删除实体时是否调用了任何类型的方法或事件?
我有一个引用存储在文件系统上的图像的图像实体(Spring Roo / JPA)。当从持久存储中删除图像实体时,我很想删除这些文件。
我可以在每个 Image 实体上编写一个手动remove()
方法,使其删除自身及其引用的文件,但这仅在使用该方法手动删除图像时才有效。显然,当删除拥有实体或通过调用它删除图像时级联删除图像时,它不会触发entityManager.remove()
。
从数据库中删除实体时是否调用了任何类型的方法或事件?
就在这里。通常,这些方法称为生命周期回调方法。在您的情况下,您需要删除后回调方法。这可以定位到单独的类(然后通过 @EntityListeners 注释引用),或者直接定位到您的实体:
@PostRemove
protected void postRemoveOperations() {
//remove images here
}
或者根据细节,@PreRemove可能更有用。