この質問では、Hibernate Enversがカスタムフィールドを使用して追跡する標準改訂情報を増強する方法を探ります。 Enversは、デフォルトでは、改訂番号、タイムスタンプ、変更の責任者などの情報を提供します。ただし、多くの場合、これらの標準フィールドとともに追加のコンテキスト固有のデータを保存する必要があります。 これは、デフォルトのエンバーリビジョンエンティティを拡張するカスタムリビジョンエンティティを作成することで達成されます。 これにより、独自の属性を追加して、より豊かな監査証跡を提供できます。 これを次のセクションで効果的に実装する方法を調べます。
カスタムデータを追加するには、Hibernateが提供するデフォルトのEnvers Revision Entityを拡張するカスタムリビジョンエンティティを作成する必要があります。 デフォルトの改訂エンティティがorg.hibernate.envers.DefaultRevisionEntity
であると仮定しましょう。 たとえば、新しいエンティティを作成しますCustomRevisionEntity
。これは、DefaultRevisionEntity
(または同等のバージョンに応じて同等)を拡張し、カスタムフィールドを追加します。 必要なゲッターとセッターを追加することを忘れないでください。 HibernateがこのエンティティをEnvers Revision Entityとして認識および管理するためには、
@Entity @Audited @Table(name = "REVINFO") public class CustomRevisionEntity extends DefaultRevisionEntity { @Column(name = "application_name") private String applicationName; @Column(name = "client_ip") private String clientIp; // Add other custom fields as needed... // Getters and setters for all fields // ... }
CustomRevisionEntity
という名前のテーブルに保存されていると想定しています。テーブル名が異なる場合は、これを調整します。applicationName
clientIp
非常に重要なことは、カスタムリビジョンエンティティを使用するようにHibernate Enversを構成する必要があります。 これは通常、hibernate構成(例:@Entity
またはプログラマティック構成)に@Audited
プロパティを設定することによって行われます。 この構成の後、Enversはカスタムエンティティを使用して、追加されたカスタムフィールドを含むリビジョン情報を保存します。CustomRevisionEntity
:Address
:
@Entity @Audited @Table(name = "REVINFO") public class CustomRevisionEntity extends DefaultRevisionEntity { @Column(name = "application_name") private String applicationName; @Column(name = "client_ip") private String clientIp; // Add other custom fields as needed... // Getters and setters for all fields // ... }
注釈。 これにより、HibernateはAddress
内でアドレスデータを持続できます。 より複雑なタイプについては、最適なデータベースパフォーマンスのために、別のテーブルと外部キー関係を使用することを検討してください。 このアプローチは、より大きなまたはより複雑なカスタムデータ型に特に有益です。
以上がHibernate Envers - カスタムフィールドで改訂情報を拡張しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。