データ管理は、特にアクティブな使用から削除する必要があるレコードを処理する場合、ソフトウェア開発の基本的なコンポーネントです。多くのアプリケーションでは、レコードを完全に削除する (「ハード削除」として知られる方法) の代わりに、「ソフト削除」と呼ばれる手法を使用しています。 「論理的な削除」アプローチは、レコードを永久に削除せずに非アクティブとしてマークする広く使用されているソリューションであり、簡単なデータ回復と履歴追跡を可能にします。
現在、Spring Data JPA や Hibernate とは異なり、Spring Data R2DBC は論理的な削除を自動的に処理するための組み込みのアノテーションを提供しません。その結果、開発者は同様の機能を実現するために、カスタム リポジトリ実装またはクエリの使用に頼ることになります。
この記事では、論理的な削除とその利点、そして R2DBC を使用して Spring WebFlux アプリケーションにそれを実装する方法について検討します。
論理的な削除とは何ですか
論理的な削除は、レコードをデータベースから削除せずに非アクティブまたは「削除済み」としてフラグを立てるデータ管理方法です。通常、これには、レコードがアクティブでなくなったことを示すために、deleted (ブール値) や deleteDate (タイムスタンプ) などのフィールドをエンティティに追加することが含まれます。データを完全に削除するのではなく、論理的な削除では、レコードが論理的に削除されたものとしてマークされ、標準クエリからは隠蔽され、回復や監査の可能性のために保存されます。
論理的な削除の利点
- データ復元: 論理的な削除により、データを簡単に復元できます。レコードが誤って削除された場合、フラグをリセットすることですぐに「削除を取り消す」ことができ、データが完全に失われることはありません。
- 履歴データ: 論理的な削除により監査証跡が提供されます。組織は多くの場合、コンプライアンスやレポートの目的で履歴データを保持する必要がありますが、論理的な削除を使用すると、アクティブなデータを混雑させることなくこれが可能になります。
- データの整合性: 複雑な関係を持つシステムでは、レコードを完全に削除すると、リンクの破損やデータの不整合が発生する可能性があります。論理的な削除は、削除されたレコードを非アクティブとしてマークしながら、関連データをそのまま維持することでこの問題に対処します。
- セキュリティとコンプライアンス: 規制では、データを特定の期間保持することが求められることがよくあります。論理的な削除を使用すると、開発者はデータを通常のユーザーが利用できるようにすることなく、これらのコンプライアンスのニーズを満たすことができます。
Spring Reactive と R2DBC を使用して論理的な削除を実装する方法
これを自分で実装することに興味がある場合は、スターター コードを用意しました。これは、基本的な CRUD エンドポイントと単体テスト ケースを備えたシンプルなブログ アプリケーションです。このリンクを使用して、私の GitHub リポジトリからスターター コードにアクセスできます。それでは、早速本題に入りましょう。
ステップ 1: レコードを削除済みとしてマークするフィールドを追加する
これを実装するには、削除ステータスを表すフィールドをエンティティ クラスに追加します。より効果的なアプローチは、抽象クラス (AbstractSoftDeletableEntity) を作成し、その中で削除ステータス フィールドを定義し、エンティティ クラスでこの抽象クラスを拡張することです。このフィールドは、レコードが削除されたかどうかを示すブール値 (deleted)、またはレコードがいつ削除されたかを指定するタイムスタンプ (deletedDate) のいずれかになります。タイムスタンプを使用すると、削除が行われたときの詳細が追加されるため、タイムスタンプを使用することをお勧めします。
ステップ 2: エンティティ クラスを変更して抽象クラスを拡張する
エンティティ クラスを変更して AbstractSoftDeletableEntity
を拡張すると、抽象化レベルと関心の分離が作成され、オブジェクト指向設計の単一責任原則が遵守されます。ステップ 3: SimpleR2dbcRepository を拡張する汎用カスタム リポジトリを作成する 論理的な削除の実装に関する多くのリソースでは、エンティティごとにカスタム リポジトリを使用することを推奨していますが、アプリケーションに多数のエンティティがある場合、これは煩雑で管理が困難になる可能性があります。より良いアプローチは、counts、deleteById、deleteAll、
findById、その他。上記のスニペットでは、SoftDeleteRepository インターフェイスを実装する
SoftDeleteRepositoryImplステップ 4: エンティティ リポジトリを変更してカスタム リポジトリ インターフェイスを拡張する 最後に、SoftDeleteRepository を拡張し、エンティティ クラス名と ID データ型をジェネリック型引数として指定して、メイン リポジトリ インターフェイスを変更します。また、論理的な削除のカスタム実装を使用するための、findById、findAll、deleteById、および deleteAll
メソッドのデフォルト実装も提供します。
ステップ 5: サービス層に論理的な削除を実装する
結論
論理的な削除は、データを永久に削除せずに管理するための効果的かつ柔軟な方法であり、データの回復、コンプライアンス、または履歴データの追跡を必要とするアプリケーションに最適です。このガイドでは、論理的な削除とは何か、その利点、および R2DBC を使用して Spring WebFlux アプリケーションに実装する方法について説明しました。
完全なソース コードは GitHub で見つけることができます
以上がRC を使用した Spring WebFlux での論理的な削除の実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

jvmmanagesgarbagecollectionacrossplatformseftivivivivitybyusagenerationalaphadadadaptingtosandhardwaredefferences.itemployscollectorslikeserial、parallel、cms、andg1、各sutitedfordifferentscenarios

Javaは、Javaの「Write and Averywherewhere」という哲学がJava Virtual Machine(JVM)によって実装されているため、変更なしで異なるオペレーティングシステムで実行できます。コンパイルされたJavaバイトコードとオペレーティングシステムの間の仲介者として、JVMはバイトコードを特定のマシン命令に変換し、JVMがインストールされた任意のプラットフォームでプログラムが独立して実行できることを確認します。

Javaプログラムの編集と実行は、BytecodeとJVMを通じてプラットフォームの独立性を達成します。 1)Javaソースコードを書き、それをbytecodeにコンパイルします。 2)JVMを使用して、任意のプラットフォームでByteCodeを実行して、コードがプラットフォーム間で実行されるようにします。

Javaのパフォーマンスはハードウェアアーキテクチャと密接に関連しており、この関係を理解することでプログラミング機能を大幅に改善できます。 1)JVMは、CPUアーキテクチャの影響を受けるJITコンピレーションを介して、Java Bytecodeを機械命令に変換します。 2)メモリ管理とゴミ収集は、RAMとメモリバスの速度の影響を受けます。 3)キャッシュとブランチ予測Javaコードの実行を最適化します。 4)マルチスレッドと並列処理がマルチコアシステムのパフォーマンスを改善します。

ネイティブライブラリを使用すると、これらのライブラリはオペレーティングシステムごとに個別にコンパイルする必要があるため、Javaのプラットフォームの独立性が破壊されます。 1)ネイティブライブラリはJNIを介してJavaと対話し、Javaが直接実装できない機能を提供します。 2)ネイティブライブラリを使用すると、プロジェクトの複雑さが増し、さまざまなプラットフォームのライブラリファイルの管理が必要です。 3)ネイティブライブラリはパフォーマンスを改善できますが、それらは注意して使用し、クロスプラットフォームテストを実施する必要があります。

JVMは、JavanativeInterface(JNI)およびJava Standard Libraryを介してオペレーティングシステムのAPIの違いを処理します。1。JNIでは、Javaコードがローカルコードを呼び出し、オペレーティングシステムAPIと直接対話できます。 2. Java Standard Libraryは統一されたAPIを提供します。これは、異なるオペレーティングシステムAPIに内部的にマッピングされ、コードがプラットフォーム間で実行されるようにします。

modularitydoesnotdirectlyectlyectjava'splatformindepensence.java'splatformendepenceismaindainededainededainededaindainedaindained bythejvm、butmodularityinfluencesApplucationStructure andmanagement、間接的なインパクチャプラット形成依存性.1)

bytecodeinjavaisthe intermediaterepresentationthateNablesplatformindepence.1)javacodeis compiledintobytecodestoredin.classfiles.2)thejvminterpretsorcompilesthisbytecodeintomachinecodeatime、


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

SublimeText3 中国語版
中国語版、とても使いやすい

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

ホットトピック









