2017-11-29 15 views
1

私はスプリングブートを持っています + hibernateアプリケーション今、私は日付変更をキャプチャするためにdebeziumを使用したいと思います。 は、このクラスは、私のPOJOエンティティクラスの一つであると仮定します。今削除されたレコードのログ記録を誰にいつ表示するのかデベジソリューションとは何ですか?

@Entity 
@Table(name = "app_user") 
public class User { 
    @Id @GeneratedValue 
    @Column(name = "id") 
    private long id; 

    @Column(name = "first_name") 
    private String firstName; 

    @Column(name = "last_name") 
    private String firstName; 

    // getters and setters are omitted for brevity 
} 

@Entity 
@Table(name = "app_article") 
public class Article { 
    @Id @GeneratedValue 
    @Column(name = "id") 
    private long id; 

    @Column(name = "title") 
    private String title; 

    @Column(name = "category") 
    private String category; 

    @ManyToOne 
    @JoinColumn(name = "created_by") 
    private User createdBy; 

    @ManyToOne 
    @JoinColumn(name = "updated_by") 
    private User updatedBy; 

    @Column(name = "created_date") 
    private Date createdDate; 

    @Column(name = "updated_date") 
    private Date updatedDate; 

    // getters and setters are omitted for brevity 
} 

、私は新しいArticleオブジェクトを作成し、コードでこのような何か、それを解決しない場合:

Article article = new Article(); 

article.setId(1); 
article.setTitle("Introduction to Debezium"); 
article.setCategory("auditing"); 
article.setCreatedBy(Utils.getCurrentUser()); 
article.setUpdatedBy(Utils.getCurrentUser()); 
article.setCreatedDate(new Date()); 
article.setUpdatedDate(new Date()); 

entityManager.persist(article); 

を再度それをロードし、変更

Article art = entityManager.load(Article.class, 1); 

art.setTitle("Introduction to Debezium for beginners"); 
art.setCategory("auditing and cdc"); 
art.setCreatedBy(Utils.getCurrentUser()); 
art.setUpdatedBy(Utils.getCurrentUser()); 
art.setCreatedDate(new Date()); 
art.setUpdatedDate(new Date()); 

entityManager.persist(art); 

をして、それを削除します:いくつかのフィールドとは、それを持続

entityManager.delete(Article.class, 1); 

私は各段階でこれらのようなログを参照することができる。

// create 
{ 
    "payload" : { 
     "before" : null, 
     "after" : { 
      "id" : 1, 
      "title" : "Introduction to Debezium", 
      "category" : "auditing", 
      "created_by" : 1, 
      "updated_by" : 1, 
      "created_date" : "11/29/2017", 
      "updated_date" : "11/29/2017" 
     }, 
     "source" : { 
      "name" : "dbserver1", 
      "server_id" : 223344, 
      "ts_sec" : 1500369632, 
      "gtid" : null, 
      "file" : "mysql-bin.000003", 
      "pos" : 364, 
      "row" : 0, 
      "snapshot" : null, 
      "thread" : 13, 
      "db" : "app", 
      "table" : "app_article" 
     }, 
     "op" : "c", 
     "ts_ms" : 1500369632095 
    } 
} 

// update 
{ 
    "payload" : { 
     "before" : { 
      "id" : 1, 
      "title" : "Introduction to Debezium", 
      "category" : "auditing", 
      "created_by" : 1, 
      "updated_by" : 1, 
      "created_date" : "11/29/2017", 
      "updated_date" : "11/29/2017" 
     } 
     "after" : { 
      "id" : 1, 
      "title" : "Introduction to Debezium for beginners", 
      "category" : "auditing and cdc", 
      "created_by" : 1, 
      "updated_by" : 1, 
      "created_date" : "11/29/2017", 
      "updated_date" : "11/29/2017" 
     }, 
     "source" : { 
      "name" : "dbserver1", 
      "server_id" : 223344, 
      "ts_sec" : 1500369632, 
      "gtid" : null, 
      "file" : "mysql-bin.000003", 
      "pos" : 364, 
      "row" : 0, 
      "snapshot" : null, 
      "thread" : 13, 
      "db" : "app", 
      "table" : "app_article" 
     }, 
     "op" : "u", 
     "ts_ms" : 1500369632095 
    } 
} 

// delete 
{ 
    "payload" : { 
     "before" : { 
      "id" : 1, 
      "title" : "Introduction to Debezium for beginners", 
      "category" : "auditing and cdc", 
      "created_by" : 1, 
      "updated_by" : 1, 
      "created_date" : "11/29/2017", 
      "updated_date" : "11/29/2017" 
     }, 
     "after": null, 
     "source" : { 
      "name" : "dbserver1", 
      "server_id" : 223344, 
      "ts_sec" : 1500369632, 
      "gtid" : null, 
      "file" : "mysql-bin.000003", 
      "pos" : 364, 
      "row" : 0, 
      "snapshot" : null, 
      "thread" : 13, 
      "db" : "app", 
      "table" : "app_article" 
     }, 
     "op" : "d", 
     "ts_ms" : 1500369632095 
    } 
} 

あなたは上記を参照できるように、私は、データベースからレコードを削除する方法は検出できません。どうすればこの問題を解決できますか?私はのHibernate Enver のようなものを補足する必要がありますか?

答えて

1

論理の削除を行うことができます。これは実際にはテーブルからArticleレコードを削除するのではなく、deletedフラグを設定するだけです。このようにして、ユーザーは送信された更新イベントの一部になります。

次に、物理的にレコードを削除する何らかの(非同期に実行中の)ハウスキーピングを実装できます。この削除を実行している(技術的な)ユーザーは、結果の削除イベントにあまり関心がありません。

関連する問題