Maison >Java >javaDidacticiel >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.
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.
CustomRevisionEntity
For example, if you have a custom
Address
<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
:Address
CustomRevisionEntity
<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!