2016-07-02 10 views
3

Ich habe Spring MVC + JPA-Anwendungen.Auditing-Änderungen in Entität JPA

Ich habe mehrere Entitäten in der Anwendung, die sich ständig ändern. Ich möchte diese Änderungen prüfen können. Ich habe festgestellt, dass es eine @Audited Annotation gibt, die Änderungen an bestimmten Feldern oder der ganzen Entität verfolgt. Ich möchte wissen, ob es eine Möglichkeit gibt, diese Spuroptionen zu konfigurieren - ich möchte verfolgen können, was geändert wurde und wer es geändert hat. Ist es auch möglich, Änderungen von mehreren Entitäten in 1 Tabelle in SQL zu haben? Ist es auch möglich, Änderungen von - @OneToMany Felder in Entity zu verfolgen?

Dank

Antwort

5

Ja, können Sie die Änderungen vorgenommen haben, aktualisiert Benutzer und Zeitstempel verfolgen.

Hibernate stellt @Audited Annotation zur Verfügung, um die Entity-Version zu verwalten.

Frühling bietet @CreatedBy@LastModifiedBy@CreatedDate und @LastModifiedDate Anmerkungen, unter diesen benötigen Sie den Benutzernamen zur Verfügung zu stellen, die AuditorAware Bean aktualisiert werden.

Rechnungsprüfung zu aktivieren,

  1. @EnableJpaAuditing auf Konfigurationsklasse
  2. @Audited mit
  3. @Audited und @EntityListeners(AuditingEntityListener.class) auf Entitäten
  4. AuditorAware<T> bereitzustellen, um die Benutzername
  5. Kinder Entitäten mit Anmerkungen versehen werden sollen
sollte hinzufügen

Beispiel

@Bean 
public AuditorAware<String> createAuditorProvider() { 
    return() -> "username"; // should be from context/session 
} 

Für jeden Einheiten eine zusätzliche Tabelle Version

  1. {ENTITY_NAME}_AUD zu halten erstellt werden // können das Präfix und Suffix Namens Audit-Tabelle
  2. REVINFO

außer Kraft setzen Unten ist ein Beispiel für eine Eins-zu-Viele-Beziehung mit dem Winterschlaf- und Frühjahrs-Auditing

UserInfo.java

@Audited 
@Entity 
@EntityListeners(AuditingEntityListener.class) 
public class UserInfo extends AuditInfo { 

    @Id 
    @GeneratedValue 
    private Long id; 

    @Column 
    private String name; 

    @OneToMany(mappedBy = "userInfo", fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
    private List<UserAddress> addresses; 

} 

UserAddress.java

@Entity 
@Audited 
@EntityListeners(AuditingEntityListener.class) 
public class UserAddress extends AuditInfo { 

    @Id 
    @GeneratedValue 
    private Long addressId; 

    @ManyToOne 
    @JoinColumn(name = "id", nullable = false) 
    private UserInfo userInfo; 

    @Column 
    private Long no; 

    @Column 
    private String street; 

} 

AuditInfo.java

@EntityListeners(AuditingEntityListener.class) 
@MappedSuperclass 
public abstract class AuditInfo { 

    @CreatedBy 
    private String createdBy; 

    @LastModifiedBy 
    private String updatedBy; 

    @CreatedDate 
    private LocalDateTime createdOn; 

    @LastModifiedDate 
    private LocalDateTime updatedOn; 

} 
+0

kann ich Hibernate JPA und Spring Daten JPA gleiche Zeit? Ich kann @EnableJpaAuditing nicht erkennen. Welche Bibliothek muss ich dafür importieren? – Purmarili

+0

'spring-data-jpa',' hibernate-jpa' und 'hibernate-envers' – Saravana

+0

Hallo, ich bin ziemlich spät, kann ich fragen, wie diese Tabellen erstellt werden? – Vipul

Verwandte Themen