是否可以在CustomEntityTrackingListener或CustomRevsionListener中捕获正在修改的实体(Book)?
我试图获取通过API/save book或/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) {
}
}
有几种方法可以做到这一点。
在第一种方法中,您可能希望遵循Envers留档中关于如何进行条件审核的建议,并引入自定义事件侦听器来扩展Envers侦听器,以便推断更改并执行您需要的任何任务。
这可能是一个非常令人生畏和乏味的步骤,因为您必须了解Hibernate如何在事件中发出数据,如何解决差异等。
我相信这里更简单的方法是使用像Debezium这样的工具,它使您能够设置一个监视配置数量的表的作业,在您的用例中,特定_AUD
感兴趣的表。每次 Envers 插入到这些表中时,Debezium 都会通过生成一个事件来对插入做出反应,然后您可以异步地对该事件做出反应。
Debezium有几种使用方式,包括嵌入到可能适合您的用例的应用程序中,或者嵌入到独立于应用程序的Kafka Connect实例中,为事件捕获和调度提供冗余和容错。
EntityTrackingRevisionListener.entityChanged()
在对象持久性之后执行,因此您可以使用提供的标识符和实体类,通过EntityManager
的find()
方法从持久性上下文中获取它。
我肯定遗漏了一些显而易见的东西;然而,我正在努力寻找一个答案来解决我与Hibernate Envers之间的问题。 假设我有一个名为MyObject的实体类,它是使用envers审计的。 如果我得到MyObject实例的当前副本,执行以下操作: 我得到了相同实例的历史副本(来自修订版2): 有没有办法区分myobject1和myobject2?我怎么知道myobject1是当前副本,myobjec
我正在实现一个 JPA-EJB 解决方案,该解决方案使用Hibernate-恩维尔斯来审核更改。使用玛丽亚DB 5.5.49. 我有一个表,它有一个< code>auto_increment字段(这不是PK,只是另一个字段),我是这样定义的: 我还按照mysql的要求为这个字段创建了一个索引和一个惟一的约束。 不知何故,Envers 无法识别此字段,并且不会在试镜表中存储 caseNumber 的
可以在一个集合/json? 使用者- 用户:id | name post:id |用户| id |文本 postimage: id|post_id|imgpath 用户模型: 帖子模式: 从用户处获取所有帖子工作正常: 我能够在一个循环内从帖子中获取所有图像 我想要的是得到所有的帖子,没有循环的图像,例如 谢啦
我试图用axios从VueJS到Laravel,这是我的API。 我得到了这个错误:
我在我的mod中创建了一个维度,一个当右键点击时应该将你传送到所述维度的物品,但是当我右键点击该物品时我崩溃了。代码中没有错误,我也不清楚是什么造成了日志中的问题。我使用内置的平面块提供程序生成维度。我可以提供你需要的任何文件。很抱歉有任何奇怪的格式设置,我不太习惯。 日志: 世界提供程序: 块提供程序: 传送器项目:
Grok 是 Logstash 最重要的插件。你可以在 grok 里预定义好命名正则表达式,在稍后(grok参数或者其他正则表达式里)引用它。 正则表达式语法 运维工程师多多少少都会一点正则。你可以在 grok 里写标准的正则,像下面这样: \s+(?<request_time>\d+(?:\.\d+)?)\s+ 小贴士:这个正则表达式写法对于 Perl 或者 Ruby 程序员应该很熟悉了,Py