当前位置: 首页 > 面试题库 >

NHibernate-如何审核实体的所有字段?

陈嘉荣
2023-03-14
问题内容

我正在使用NHibernate,并且正在寻找一种解决方案,该解决方案将允许我审核实体中所有字段的更改。我希望能够为每个实体(例如,用户->
UsersHistory)创建一个历史表,该表将具有与用户表相同的结构,并具有其他字段,例如操作类型(更新,删除),进行更改的用户的userid等。不想为每个实体定义此类。我正在寻找类似的东西History<T>(即History<User>),因为这些条目不属于我的域,仅用于准备对该实体所做的更改的列表。我还认为,最好用代码在这些表中创建插入,而不是创建sql触发器。基本上,我只需要在更新或删除时在历史表中创建记录的副本,并且我想由NHibernate生成插入。我还需要从历史记录表中读取记录-
正如我所说的,这些表将由实体字段和一些常见的历史记录字段组成。

我找不到有关如何创建此类解决方案的指南。我所能找到的就是添加UserModified,UpdatedTimestamp等(如果我已经在实体上拥有此类字段)。但是,我需要实体的完整历史记录,而不仅仅是最后更改条目的信息。

在此先感谢您的帮助。


问题答案:

NHibernate有一个很酷的开源审计跟踪,称为nhibernate.envers
https://bitbucket.org/RogerKratz/nhibernate.envers,因此您不必重新发明轮子。

它透明地集成到NHibernate中,无需更改域模型或映射。

就像添加引用和调用一样简单:

var enversConf = new FluentConfiguration(); 
enversConf.Audit<User>();
nhConf.IntegrateWithEnvers(enversConf);

nhConf您的NHibernate配置对象。

对于对象上的每个更改,都会创建一个新修订版本,您可以通过调用以下命令要求Envers检索修订版本:

var reader = AuditReaderFactory.Get(session);
var userInRevOne = reader.Find<User>(user.Id, 1);

或列出所有修订等。修订数据本身可以包含用户名,用户ID,时间戳等(无论您认为如何)。

编辑:它可以在NuGet上找到:http :
//nuget.org/packages/NHibernate.Envers



 类似资料:
  • 我在试图让被审计的实体引用未被审计的实体时遇到问题。在我们的应用程序中,某些实体在没有使用hibernate的情况下被引导,这些实体是我们的元模型,不需要被审计。 如果我执行代码: 一切都很顺利,但是如果我试图获得B的版本,就会出现错误: 组织.Hibernate.对象不发现例外:不存在具有给定标识符的行 [元foo] Envers通过对metafoo实体的惰性引用成功地查找了B实体。然而,当尝试

  • 问题内容: 我有Spring MVC + JPA应用程序。 我的应用程序中有几个实体在不断变化。我希望能够审核此更改。我发现有一个注释可以跟踪对某些字段或整个实体的更改。我想知道是否有任何方法可以配置此跟踪选项- 我希望能够跟踪更改的内容以及更改的人。还可以对SQL 1个表中的多个实体进行更改吗?还可以跟踪- 实体字段的变化吗? 谢谢 问题答案: 是的,您可以跟踪所做的更改,更新的用户和时间戳。

  • 本文向大家介绍nhibernate 所有,包括了nhibernate 所有的使用技巧和注意事项,需要的朋友参考一下 示例 保存/更新/删除对象时,请检查关联并保存/更新/删除找到的所有对象。

  • 我有一个项目,我有我所有的实体。我还有另一个项目,我试图获取每个给定实体的每个已审核表的所有数据。使用Hibernate的envers,我知道如何在以前的版本中检索对象。 但是我不知道如何使用rev et typerev字段在经过审计的X中获取所有记录数据。 有什么想法吗?

  • 我有一个实体像下面在Nestjs应用程序与typeorm为mongoDB: 我的其他实体扩展了审计,在我的应用程序中,我使用jwt来验证用户。 问题是,当我想保存一个实体,我不知道如何设置createdBy与@Before插入钩子... 我知道请求中有用户,但我不知道将用户引入方法的正确方法是什么?

  • 问题内容: 我使用Hibernate Envers审核我的实体。 我有一个审核的实体,它具有as属性。但是,我不想审核实体。因此,我写道: 现在,我要检索的修订: 不幸的是,当我想检索所有数据时(即,当它延迟加载时),我得到了error ,因为它试图查询: 我虽然使用,但Hibernate Envers会保持与 当前 实体项目的链接。 __ 那么如何解决我的问题,而不必显式审核表和(联接表)?在别