【发布时间】:2012-09-20 17:14:37
【问题描述】:
我有一个项目最近从OpenJPA 转换为Hibernate。在替换特定于OpenJPA 的配置部分时,我遇到了一个无法在Hibernate 中复制的功能。
在OpenJPA 中,我们通过使用@Strategy 注释实体并提供org.apache.openjpa.jdbc.meta.strats.AbstractStrategy 的实例来执行自定义删除。在customDelete 方法中,我们调用了一个共享的存储过程并传递了一个表名、实体ID 和一个用户ID 来执行操作,这个过程将删除实体并创建一个审计日志条目。
在Hibernate 中,我可以找到许多可用的钩子,但似乎没有一个提供相同的功能。我看过以下内容:
@SQLDelete("customer delete query") - 此选项仅允许您访问 id,而不是表名或用户 id,因此每个类都可以自定义并且仍然缺少信息
EntityListener 类 - 此选项告诉您删除的实体,但需要深入了解实际涉及哪些表,并且超出单个 db 操作的范围
是否有任何其他选项更接近 OpenJPA 方法,或者我最好的选择是使用 EntityLister 类并自己做繁重的工作来确定表名?
【问题讨论】: