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

EmptyInterceptor Sınıfı

Giriş
Elimizde şöyle bir kod olsun
@Entity
@Audited
public class Person {
    @Id
    @GeneratedValue
    private int id;

    private String name;
    private String surname;
// add getters, setters, constructors, equals and hashCode here
}
Bu nesneyi veritabanına yazalım
Person p1 = new Person("name-1", "surname-1");
personRepository.save(p1);
Person p2 = personRepository.findOne(1L);
p2.setName("new-name");
personRepository.save(p2);
Eğer EmptyInterceptor sınıfını kullanırsak değişkliklere erişebiliriz. Açıklaması şöyle.
You could write a custom interceptor by implementing org.hibernate.EmptyInterceptor. This has callbacks to update/insert/delete with old and new snapshots of entities
onSave metodu
İmzası şöyle
public boolean onSave(Object entity,Serializable id,
    Object[] state,String[] propertyNames,Type[] types)