2015-04-09 5 views
0

Я хотел бы указать @Entity, чьи изменения (операции CRUD) должны регистрироваться в текстовом файле. Есть ли какой-либо каркас, который я мог бы использовать в сочетании с spring?Как регистрировать любые изменения на @Entity автоматически?

Я знаю о Envers, но это будет приветствовать исторические записи в таблице базы данных. Но я просто хотел бы иметь журнал, без отслеживания версий.

Я использую в основном пружину CrudRepository интерфейсы для операций CRUD.

+0

являются JPA сущности? –

+0

да они JPA лица – membersound

ответ

1

Вы можете посмотреть в JPA EntityListeners, которые могут войти в JPA жизненный цикл.

Вы можете аннотировать lifecycle callback methods в том же классе, как показано ниже

Использование методов жизненного цикла обратного вызова

@Entity 
public class Employee { 

@TableGenerator(name = "employee_gen", pkColumnName = "gen_name", valueColumnName = "gen_val", allocationSize = 1,table="id_gen") 
@Id 
@GeneratedValue(generator = "employee_gen", strategy = GenerationType.TABLE) 
private int idEmployee; 

private String firstName; 
private String lastName; 
private int salary; 

public int getIdEmployee() { 
    return idEmployee; 
} 

public void setIdEmployee(int idEmployee) { 
    this.idEmployee = idEmployee; 
} 

// gettrs and setters 

@PrePersist 
public void methodInvokedBeforePersist() { 
    System.out.println("Invoked before persisting employee"); 
} 

@PostPersist 
public void methodInvokedAfterPersist() { 
    System.out.println("Invoked after persisting employee"); 
} 

@PreUpdate 
public void methodInvokedBeforeUpdate() { 
    System.out.println("Invoked before updating employee"); 
} 

@PostUpdate 
public void methodInvokedAfterUpdate() { 
    System.out.println("Invoked after updating employee"); 
} 

@PreRemove 
public void methodInvokedBeforeRemove() { 
    System.out.println("Invoked before removing employee"); 
} 

@PostRemove 
public void methodInvokedAfterRemove() { 
    System.out.println("Invoked after removing employee"); 
} 

    } 

Использование отдельных классов EntityListener Рассматривают у вас есть объект Employee, для которого вы хотите слушать его жизненный цикл

@Entity 
@EntityListeners(EmployeeLoggingListener.class) 
public class Employee{...} 

и EmployeeLoggingListerner выглядит следующим образом

public class EmployeeLoggerListener { 

    @PrePersist 
    public void methodInvokedBeforePersist(Employee emp) { 
     System.out.println("persisting employee with id = " + emp.getIdEmployee()); 
    } 

    @PostPersist 
    public void methodInvokedAfterPersist(Employee emp) { 
     System.out.println("Persisted employee with id = " + emp.getIdEmployee()); 
    } 

    @PreUpdate 
    public void methodInvokedBeforeUpdate(Employee emp) { 
     System.out.println("Updating employee with id = " + emp.getIdEmployee()); 
    } 

    @PostUpdate 
    public void methodInvokedAfterUpdate(Employee emp) { 
     System.out.println("Updated employee with id = " + emp.getIdEmployee()); 
    } 

    @PreRemove 
    private void methodInvokedBeforeRemove(Employee emp) { 
     System.out.println("Removing employee with id = " + emp.getIdEmployee()); 
    } 

    @PostRemove 
    public void methodInvokedAfterRemove(Employee emp) { 
     System.out.println("Removed employee with id = " + emp.getIdEmployee()); 
    } 

} 
0

Вы можете использовать прослушиватель Entity.

Добавить в базовый класс (все классы объектов должны быть расширены), помеченные как, например, @PrePersist или @PostUpdate

и написать каротаж там

См here и here

0

Вы должны смотреть в Hibernate interceptors, это полезно, когда вы должны реагировать на события, связанные с сохранением, обратных вызовов, предоставляемые в

  • OnSave - Вызывается при сохранении объекта, объект не сохраняется в базе данных .
  • onFlushDirty - Вызывается при обновлении объекта, объект не обновляется в базе данных.
  • onDelete - Вызывается при удалении объекта, объект еще не удаляется в базу данных.
  • preFlush - Вызывается перед сохранением, обновлением или удалением объектов, привязанных к базе данных (обычно до postFlush).
  • postFlush - Вызывается после сохраненных, обновленных или удаленных объектов привязаны к базе данных.

here вы можете найти реализацию журнала exemplery аудита на основе Hibernate перехватчик