我们目前有以下正在运行的软删除定制器:
public class SoftDeleteCustomizer implements DescriptorCustomizer {
@Override
public void customize(ClassDescriptor descriptor) {
descriptor.getQueryManager().setDeleteSQLString(
String.format("UPDATE %s SET record_status = 'D', record_status_time = CURRENT_TIMESTAMP WHERE id = #ID",
descriptor.getTableName()
)
);
}
}
现在我们要添加删除记录的用户。我可以清理用户名,但我更喜欢使用参数/实参。
我重写了定制器,没有为#ID
设置参数,因为它已经在某个地方被正确地注入了。(带参数?)。所以我必须为#ID
添加一个参数,但是我不知道如何获得要从ClassDescriptor
中删除的记录/实体的id /主键值。
这是我目前掌握的情况:
@Override
public void customize(final ClassDescriptor descriptor) {
final DeleteObjectQuery query = new DeleteObjectQuery();
query.addArgument("DELETED_BY", String.class);
query.addArgument("ID", Long.class);
query.addArgumentValue(SecurityUtils.getUsername());
query.addArgumentValue(...); // How to get the ID of the record to delete?
query.setSQLString(String.format(DELETE_SQL, descriptor.getTableName()));
descriptor.getQueryManager().setDeleteQuery(query);
}
1条答案
按热度按时间fjaof16o1#
好的,作为一种解决方案,我使用了我们的审计监听器,它是作为
EntityListeners
之一添加的。它实现了SessionCustomizer
。在那里我能够做到: