我的模型SomeFileModel
包含对存储在磁盘上的文件的引用。我想将该文件与实体一起保存并立即删除它们。虽然前者并不困难,但问题在于后者:SomeFileModel
与另一个模型FilesCollectionModel
多对一关联,并使用orphanRemoval = true
进行注释。
当负责SomeFileModel
的服务删除该文件时,当我们订购销毁实体时,其他服务(正如人们所期望的那样)不会这样做。当然,我可以让所有模型都有一些prepareDeleteion()
方法,可以通过级联调用,但我不认为这是最好的方法。
我的问题是:是否有一些注释或其他会标记方法的约定,以便在实体删除时调用?它甚至可能吗?或者我应该使用其他解决方案,例如“孤立的文件收集器”会删除没有数据库中的引用的文件,或者丑陋的级联方法调用?什么方法最好?
如果有帮助,我使用Hibernate 4和Spring Framework 3.1.0。
答案 0 :(得分:1)
是的,简短回答是Interceptors and Events
根据Hibernate docs:
拦截器:
The Interceptor interface provides callbacks from the session to the app,
allowing the application to inspect and/or manipulate properties of a
persistent object before it is saved, updated, deleted or loaded.
活动:
The event system can be used in addition, or as a replacement, for interceptors.
All the methods of the Session interface correlate to an event.
You have a LoadEvent, a FlushEvent, etc.