2017-06-19 4 views
1

Ich habe eine Entität, und ich möchte alle Änderungen verfolgen, daher habe ich neue Entität für Audit erstellt. Unten ist meine primäre Einheit:Hibernate - Entity Audit

@Data 
@NoArgsConstructor 
@AllArgsConstructor 
@Entity 
@EntityListeners(AuditingEntityListener.class) 
@Table(name = "primary") 
public class PrimaryEntity { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "primary_id") 
    private Long id; 

    private String name; 

    @LazyCollection(LazyCollectionOption.FALSE) 
    @ElementCollection 
    @CollectionTable(
      name = "primary_attachments", 
      joinColumns = @JoinColumn(name = "primary_id") 
    ) 
    private List<String> attachments; 

    @CreatedDate 
    @Temporal(TemporalType.DATE) 
    private Date createDate; 

    @LastModifiedDate 
    @Temporal(TemporalType.DATE) 
    private Date lastModifiedDate; 
} 

Und unten ist mein Unternehmen für die Prüfung:

@Data 
@NoArgsConstructor 
@AllArgsConstructor 
@Entity 
@EntityListeners(AuditingEntityListener.class) 
@Table(name = "primary_audit") 
public class PrimaryEntityAudit { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "audit_id") 
    private Long id; 

    @NotNull 
    @Column(name = "primary_entity_id") 
    private Long primaryId; 

    private String name; 

    @LazyCollection(LazyCollectionOption.FALSE) 
    @ElementCollection 
    @CollectionTable(
      name = "primary_attachments_audit", 
      joinColumns = @JoinColumn(name = "primary_entity_id") 
    ) 
    private List<String> attachments = new ArrayList<>(); 

    @CreatedDate 
    @Temporal(TemporalType.DATE) 
    private Date createDate; 

    public PrimaryEntityAudit(PrimaryEntity primaryEntity) { 
     this.primaryId = primaryEntity.getId(); 
     this.attachments.addAll(primaryEntity.getAttachments()); 
     this.createDate = new Date(); 
    } 
} 

Und bevor Update primäre Entität ich neue PrimaryEntityAudit erstellen und dieses Objekt speichern und dann die primäre Entität aktualisieren. Und Operation ist erfolgreich und Objekt PrimaryEntityAudit wird gespeichert, aber Anlagen von PrimaryEntityAudit werden nicht gespeichert.

Ich versuchte auch im Konstruktor von ProjectEntityAudit tun SetAttachments, aber dann habe ich eine Ausnahme: HibernateExcpetion: Gefundene Referenzen auf Sammlung gefunden.

Wie sollte ich die Überwachungssammlungen zuordnen, um alte Status von PrimaryEntity-Anlagen zu speichern?

Antwort

3

Sie auf der folgenden Hibernate-Modul aussehen sollte Envers

Es bietet Funktionen für die Versionierung und Revision

Es ist vorzuziehen, das Rad außer nicht neu erfinden, wenn Sie technicals Einschränkungen, die Sie verhindern, dass einige Frameworks verwenden oder Andere.

Verwandte Themen