2016-12-23 1 views
2

Ich benutze @Audited Anmerkung für mein Basismodell. Ich erweitere das für alle meine Entitäten. aber es funktioniert nicht. Gibt es eine Methode, die ich verwenden kann, dassBasismodell mit @Audited

dies mein Basismodell ist

@MappedSuperclass 
@Getter 
@Setter 
@Audited 
public abstract class BaseModelObject implements Serializable { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 4194525198831057382L; 


    @Id  
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "id") 
    protected Long id; 
} 

Das ist meine Modellklasse

@Entity 
public class City extends BaseModelObject { 

    private static final long serialVersionUID = 1L; 

    @Column 
    private String name; 
} 

Antwort

4

Die @Audited Anmerkung glauben, dass die Art und Weise nicht funktioniert, sollte es. Durch sie auf einer Super-Klasse verwendet wird, hat es keine Auswirkungen auf die untergeordneten Klassen, die sie verlängern, zumindest zu kontrollieren, ob das Kind ist oder ist nicht geprüft. Das ist Absicht.

den Begriff Überlegen Sie, wo wir eine Supertyp und zwei unterschiedliche Implementierungen haben, eine, die wir mit seiner übergeordneten Klasse Eigenschaften und ein überwachen möchten, die wir nicht.

@MappedSuperclass 
@Audited 
public class Animal {} 

@Entity 
@Audited 
public class Cat extends Animal {} 

@Entity 
public class Dog extends Animal {} 

In diesem Beispiel, da @Audited ist, nur nicht vererbt auf der übergeordneten Klasse die Anmerkung platzieren und die Cat in Einheit Ergebnis nur Cat geprüft werden. Die Dog Unternehmen und seine Supereigenschaftswerte nicht.

Wenn @Audited als vererbte Annotation behandelt würden, müssten wir eine Reihe von @AuditOverride Annotationen einführen, um das gleiche Beispiel zu erhalten, siehe unten.

@MappedSuperclass 
public class Animal {} 

@Entity 
@Audited 
@AuditOverride(...) 
public class Cat extends Animal {} 

@Entity 
public class Dog extends Animal {} 

Was noch schlimmer macht, ist, wenn Animal eine Teilmenge seiner Eigenschaften hatte geprüft, was die Anzahl der @AuditOverride s beeinflussen würde.

Dies wird noch komplizierter, wenn Sie beginnen, Entity Vererberungsstrategien zu untersuchen und wie diese ins Spiel kommen, ob eine Entity auditiert wird oder nicht und in welchem ​​Grad auf welcher Hierarchieebene. Es gibt eine ganze Diskussion HHH-6331 und HHH-9770.

Kurz gesagt, wenn Sie Ihr Kind Klassen geprüft wollen, müssen sie werden explizit mit Anmerkungen versehen werden.

+0

danke - Naros – wthamira

+0

Diese Beschreibung ist sehr klar für mich! – wthamira

+0

können wir Auditdaten in einer separaten Datenbank statt in einer Hauptdatenbank speichern? – wthamira

1

Versuchen mit diesem:

Superklasse:

@MappedSuperclass 
@EntityListeners(AuditingEntityListener.class) 
public abstract class AuditableEntity implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @CreatedDate 
    private LocalDateTime createdDate; 

    @LastModifiedDate 
    private LocalDateTime lastModifiedDate; 

    @CreatedBy 
    private String createdBy; 

    @LastModifiedBy 
    private String lastModifiedBy; 

    ... 
} 

Entity cl Esel:

@Entity 
public class City extends AuditableEntity { 

    @Id 

    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    ... 
} 

Konfiguration:

@EnableJpaAuditing 
@SpringBootApplication 
@EnableTransactionManagement 
@EntityScan("foo.entities") 
@ComponentScan("foo") 
@EnableJpaRepositories("foo.repositories") 
public class ConfigApp { 

    ... 
} 

Auditor Service:

@Service 
public class AuditorServiceImpl implements AuditorAware<String> { 

    @Override 
    public String getCurrentAuditor() { 
     return SecurityContextHolder.getContext().getAuthentication().getName(); 
    } 
} 
+0

Diese Revision mit JPA. in diesem Verfahren, das ich erhielt großes Problem. Weil Daten in derselben Tabelle geschrieben werden. Historische Daten können nicht abgerufen werden. In Hibernate Envers auch Verlaufsdaten zur Verfügung stellen. diese Frage Basis auf Hibernate Envers. Können wir beides zusammen benutzen? http: //www.baeldung.com/datenbank-auditing-jpa – wthamira

Verwandte Themen