Maison >Java >javaDidacticiel >Hibernate Envers - Extension des informations de révision avec des champs personnalisés

Hibernate Envers - Extension des informations de révision avec des champs personnalisés

Emily Anne Brown
Emily Anne Brownoriginal
2025-03-07 17:43:53679parcourir

Hibernate Envers - Extension des informations de révision avec des champs personnalisés

Cette question explore comment augmenter les informations de révision standard suivie par Hibernate Envers avec des champs personnalisés. Envers, par défaut, fournit des informations telles que le numéro de révision, l'horodatage et l'utilisateur responsable du changement. Cependant, vous devez souvent stocker des données supplémentaires spécifiques au contexte aux côtés de ces champs standard. Ceci est réalisé en créant une entité de révision personnalisée qui étend l'entité de révision Envers par défaut. Cela vous permet d'ajouter vos propres attributs, en fournissant des sentiers d'audit plus riches. Nous explorerons comment implémenter cela efficacement dans les sections suivantes.

Comment puis-je ajouter des données personnalisées à mes informations de révision Hibernate Envers?

Pour ajouter des données personnalisées, vous devez créer une entité de révision personnalisée qui étend l'entité de révision Endurs par défaut fournie par Hibernate. Supposons que votre entité de révision par défaut soit org.hibernate.envers.DefaultRevisionEntity. Vous créeriez une nouvelle entité, par exemple, CustomRevisionEntity, qui étend DefaultRevisionEntity (ou son équivalent, selon votre version Envers) et ajoute vos champs personnalisés.

<code class="java">@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
    // ...
}</code>

Ce code définit A CustomRevisionEntity avec deux champs supplémentaires: applicationName et clientIp. N'oubliez pas d'ajouter les getters et les setters nécessaires. Les annotations @Entity, @Audited et @Table sont cruciales pour que l'hibernate reconnaisse et gérer cette entité en tant qu'entité de révision Envers. L'annotation @Table(name = "REVINFO") suppose que vos informations de révision sont stockées dans un tableau nommé REVINFO. Ajustez-le si le nom de votre table diffère.

Surtout, vous devez configurer Hibernate Envers pour utiliser votre entité de révision personnalisée. Cela se fait généralement en définissant la propriété revisionEntityClass dans votre configuration d'hibernate (par exemple, hibernate.cfg.xml ou une configuration programmatique).

<code class="xml"><property name="org.hibernate.envers.revision_entity_class" value="com.yourpackage.CustomRevisionEntity" /></code>

Remplacer com.yourpackage.CustomRevisionEntity par le nom entièrement qualifié de votre entité de révision personnalisée. Après cette configuration, Envers utilisera votre entité personnalisée pour stocker les informations de révision, y compris vos champs personnalisés supplémentaires.

Quelles sont les meilleures pratiques pour étendre les métadonnées de révision Hibernate ENVERS avec mes propres attributs?
  • Gardez-le pertinent: Ajouter uniquement des champs qui fournissent des informations d'audit vraiment précieuses. Évitez d'ajouter des données inutiles pour garder le tableau de révision concis et efficace.
  • Utilisez les types de données appropriés: Choisissez des types de données qui représentent avec précision les données stockées. Envisagez d'utiliser des énumérations pour des vocabulaires contrôlés et des types numériques appropriés pour les quantités.
  • Envisagez d'indexation: pour les champs personnalisés fréquemment interrogés, ajoutez des index de base de données pour améliorer les performances de la requête. Ceci est particulièrement important pour les grandes tables d'audit.
  • Validation des données: Implémentez la validation des données pour vos champs personnalisés pour maintenir l'intégrité des données. Cela pourrait impliquer d'utiliser des validateurs hibernate ou une logique de validation personnalisée.
  • maintenabilité: Concevez vos champs personnalisés avec une extensibilité future à l'esprit. Évitez les valeurs de codage rigide ou les couplant étroitement à une logique d'application spécifique.
  • Conventions de dénomination: Utilisez des conventions de dénomination claires et cohérentes pour vos champs personnalisés, en suivant le guide de style de votre projet. Cela améliore la lisibilité et la maintenabilité.
  • Considérations de performances: Les champs personnalisés importants ou complexes pourraient avoir un impact négatif sur les performances. Envisagez de stocker de gros objets séparément et de les référencer dans votre entité de révision à l'aide d'une relation de clé étrangère.

Est-il possible d'utiliser des types de données personnalisés lors de l'extension des informations de révision dans les envers Hibernate? Vos champs personnalisés dans le

peuvent être de tout type pris en charge par Hibernate, y compris vos propres classes personnalisées. Cependant, n'oubliez pas que l'hibernate doit être capable de persister ces types. This means your custom types need to be properly mapped as Hibernate entities or value objects.

CustomRevisionEntityFor example, if you have a custom

class:

Address

You can include an
<code class="java">@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
    // ...
}</code>
field in your

:AddressCustomRevisionEntity

Remember that you'll need to ensure that the
<code class="xml"><property name="org.hibernate.envers.revision_entity_class" value="com.yourpackage.CustomRevisionEntity" /></code>
class is correctly mapped as an embeddable entity using

Annotation. Cela permet à Hibernate de persister les données d'adresse dans le Address. Pour des types plus complexes, envisagez d'utiliser une table séparée et une relation de clé étrangère pour les performances optimales de la base de données. Cette approche est particulièrement bénéfique pour les types de données personnalisés plus grands ou plus complexes. @Embeddable

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn