首页 > 解决方案 > 特定客户数据清除

问题描述

我们有这个用例,由于客户退出后的一些合规性,我们希望清除与客户相关的整个数据。

为此,我创建了一个任务,它运行几个带有硬编码表名的删除语句。

如果在应用程序中添加了新表,我们需要每次都更新硬编码的表名列表并且它不被接受。

下面的问题是关于如何以编程方式列出所有表格的答案。

如何从数据库中获取所有表名?

但是在我的用例中,我们不想删除一些静态表/应用程序配置表。

所以问题是,如何使表名可配置如何在删除数据时避免静态表

保留此列表的表上的 Crud API 是一种选择,但有更好的方法吗?

当前实现在查询列表下方执行以清除数据

private static List<String> DELETE_ALL_DATA_BY_REALM_SQL;
    static {
        DELETE_ALL_DATA_BY_REALM_SQL = new ArrayList<>();

        DELETE_ALL_DATA_BY_REALM_SQL.add(DELETE_ATTACHMENT);
        DELETE_ALL_DATA_BY_REALM_SQL.add(DELETE_FORM_REALM);

        DELETE_ALL_DATA_BY_REALM_SQL.add(DELETE_JOB_DETAILS_BY_REALM_SQL);
        DELETE_ALL_DATA_BY_REALM_SQL.add(DELETE_JOB_BY_REALM_SQL);

        DELETE_ALL_DATA_BY_REALM_SQL.add(DELETE_FORM_METADATA);
        DELETE_ALL_DATA_BY_REALM_SQL.add(DELETE_FORM_METADATA_SQL);

        DELETE_ALL_DATA_BY_REALM_SQL.add(DELETE_ACCESS_CONTROL);
        DELETE_ALL_DATA_BY_REALM_SQL.add(DELETE_ACCESS_CONTROL_BY_REALM);
        DELETE_ALL_DATA_BY_REALM_SQL.add(DELETE_CONFIGURATION_);

        DELETE_ALL_DATA_BY_REALM_SQL.add(DELETE_FORM_SCHEMA_);

        DELETE_ALL_DATA_BY_REALM_SQL.add(DELETE_BY_REALM_SQL);

        DELETE_ALL_DATA_BY_REALM_SQL.add(DELETE_FORM_MIGRATION_);

        DELETE_ALL_DATA_BY_REALM_SQL.add(DELETE_AUDIT_EVENT);

        DELETE_ALL_DATA_BY_REALM_SQL.add(DELETE_CLIENTID_);

        DELETE_ALL_DATA_BY_REALM_SQL.add(DELETE_FORM_FEATURE_REALM_ENABLEMENT_BY_REALM_SQL);

        DELETE_ALL_DATA_BY_REALM_SQL.add(DELETE_REALM_BY_REALM_SQL);
    }

标签: javahibernate

解决方案


推荐阅读