【发布时间】:2020-02-27 15:24:03
【问题描述】:
是否可以在 CustomEntityTrackingListener 或 CustomRevisionListener 中捕获正在修改的实体(书籍)?
我试图获取通过 api /saveBook 或 /update/{id}/{pages} 传递的所有信息,而不仅仅是修订信息。
在envers中审计实体时,它会自动为每个实体创建一个_AUD表和一个修订表以连接实体及其_AUD表
使用自定义修订侦听器我只能获取有关修订的信息,但我想访问正在修改和保存的实体本身。
...
@PostMapping("/saveBook")
public Book saveBook(@RequestBody Book book) {
return repository.save(book);
}
@PutMapping("/update/{id}/{pages}")
public Book updateBook(@PathVariable int id, @PathVariable int pages) {
Book book = repository.findById(id).get();
book.setPages(pages);
return repository.save(book);
}
...
@Entity
@AllArgsConstructor
@NoArgsConstructor
@Data
@Audited
public class Book {
@Id
@GeneratedValue
private int id;
private String name;
private int pages;
}
@Entity
//@RevisionEntity(ExampleListener.class)
@RevisionEntity(CustomEntityTrackingRevisionListener.class)
public class ExampleRevEntity extends DefaultRevisionEntity {
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@OneToMany(mappedBy="revision", cascade={CascadeType.PERSIST, CascadeType.REMOVE})
private Set<ModifiedEntityTypeEntity> modifiedEntityTypes =
new HashSet<ModifiedEntityTypeEntity>();
}
public class ExampleListener implements RevisionListener {
@Override
public void newRevision(Object revisionEntity) {
ExampleRevEntity exampleRevEntity = (ExampleRevEntity) revisionEntity;
//Identity identity = (Identity) Component.getInstance("org.jboss.seam.security.identity");
exampleRevEntity.setUsername("Joaquin");
}
}
public class CustomEntityTrackingRevisionListener implements EntityTrackingRevisionListener {
@Override
public void entityChanged(Class entityClass, String entityName,
Serializable entityId, RevisionType revisionType,
Object revisionEntity) {
String type = entityClass.getName();
//((CustomTrackingRevisionEntity)revisionEntity).addModifiedEntityType(type);
((ExampleRevEntity)revisionEntity).addModifiedEntityType(type);
}
@Override
public void newRevision(Object revisionEntity) {
}
}
【问题讨论】:
标签: java spring spring-boot hibernate-envers