Envers etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Envers etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

10 Şubat 2019 Pazar

Envers @Audited Anotasyonu

Giriş
Şu satırı dahil ederiz.
import org.hibernate.envers.Audited;
Örnek
Şöyle yaparız.
@Audited
@Entity
public class MyTable {
...
}
Denetim bilgisi için iki tablo yaratırız. Şöyle yaparız. MY_TABLE_AUD id + rev bilgisini içerir.
CREATE TABLE MY_TABLE_AUD (
    ID BIGINT       NOT NULL,
    REV             INTEGER NOT NULL,
    REVTYPE         TINYINT,
   PRIMARY KEY ( id, REV )
);

create table REVINFO (
    REV  INTEGER GENERATED BY DEFAULT AS IDENTITY,
    REVTSTMP BIGINT,
    PRIMARY KEY ( REV )
);

alter table MY_TABLE_AUD
   add constraint FK5ecvi1a0ykunrriib7j28vpdj
   foreign key (REV)
   references REVINFO;
withModifiedFlag Alanı
Örnek
Elimizde şöyle bir kod olsun.
@Entity
@Audited(withModifiedFlag = true)
public class Person {
  @Id
  @GeneratedValue
  private Integer id;
  private String name;
}
Şöyle bir tablo yaratılır.
+----+------+----------+-----+---------+
| ID | name | name_MOD | REV | REVTYPE |
+----+------+----------+-----+---------+

Envers AuditReader Arayüzü

Giriş
Açıklaması şöyle.
I know that envars can store changes in db and let me extract them later with AuditReader

20 Temmuz 2018 Cuma

Envers @NotAudited Anotasyonu

Örnek
Şöyle yaparız.
@Entity
@Table(name = "child")
@Audited
public class Child extends BaseEntity {

    @OneToOne
    @JoinColumn(name = "application_id")
    @MapsId
    @NotAudited
    private Parent parent;
....

6 Haziran 2018 Çarşamba

Envers EntityTrackingRevisionListener Arayüzü

entityChanged metodu
Şöyle yaparız.
public class MyRevisionListener implements EntityTrackingRevisionListener {

  @Override
  public void newRevision(Object revision) {
    ...
  }

  @Override
  public void entityChanged(Class entityClass,
                            String entityName,
                            Serializable entityId,
                            RevisionType revisionType,
                            Object revisionEntity) {
    EntityManager em = ...;
    int id = ((DefaultRevisionEntity) revisionEntity).getId();
    List<?> revisions = AuditReaderFactory.get(em)
      .createQuery()
      .forRevisionsOfEntity(entityClass, false, true)
      .add(AuditEntity.id().eq(entityId))
      .add(AuditEntity.revisionNumber().le(id + 1))
      .addOrder(AuditEntity.revisionNumber().desc())
      .setMaxResults(2)
      .getResultList();

    checkArgument(revisions.size() > 0, "Need at least one revision: %s", revisions);

    // continue with calculating and persisting the diff;
  }

}