标签: nhibernate-envers

如何在 Spring Boot 应用程序中访问 AuditReaderFactory?

我正在使用 spring boot 和 spring 数据 jpa。我也在使用 hibernate envers,我需要访问 AuditReaderFactory 以便我可以编写审计查询。

因为它是一个弹簧引导和弹簧数据 jpa,所以一切都是自动配置的。所以当我这样做时,

@Autowired
AuditReaderFactory auditReaderFactory;
Run Code Online (Sandbox Code Playgroud)

它不起作用。我收到以下错误。

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.hibernate.envers.AuditReaderFactory] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency
Run Code Online (Sandbox Code Playgroud)

如何在我的存储库类中正确引用 AuditReaderFactory?

java spring-data-jpa spring-boot nhibernate-envers

7
推荐指数
4
解决办法
4565
查看次数

nhibernate envers:审计已经在生产中的实体

我们有一个已经投入生产的应用程序,它正在使用 Envers 进行审计。

现在我们将发布一个更新,我们将在其中审核一种新的实体。然而,这个实体已经存在于生产环境中,只是到目前为止还没有被审计。

我们已经在包含现有记录的测试环境中进行了尝试,但它在保存时崩溃,因为 Envers 找不到正在保存的实体的先前修订版。

解决这个问题的方法是什么?

例如,如果可以指定对实体进行审计的日期,那就太好了。

.net nhibernate nhibernate-envers

4
推荐指数
1
解决办法
471
查看次数

NHibernate Envers版本信息的UTC时间戳

我正在使用NHibernate Envers 1.6.0并且需​​要使用UTC时间戳而不是本地REVINFO中的REVTSTMP列.

我知道已经报告了这个bug(NHE-122)并且已经修复了未来的2.0版本

有什么办法可以将DefaultRevisionInfoGenerator更改为我自己的自定义IRevisionInfoGenerator吗?

c# nhibernate audit-logging nhibernate-envers

2
推荐指数
1
解决办法
486
查看次数

添加 OR 条件进行查询

我想知道如何OR向 Envers 标准 api添加条件:

    public IEnumerable<Guid> GetHistory(object id, params string[] props)
    {
        var auditQuery = AuditReaderFactory.Get(Session).CreateQuery()
            .ForRevisionsOfEntity(typeof(T), false, true);

        foreach (var prop in props)
        {
            auditQuery.Add(AuditEntity.RelatedId(prop).Eq(id)); // <-- adds AND, while OR is required!
        }

        return auditQuery
            .GetResultList<object[]>()
            .Select(i => ((T)i[0]).ID)
            .Distinct();
    }
Run Code Online (Sandbox Code Playgroud)

hibernate-envers nhibernate-envers

2
推荐指数
1
解决办法
1407
查看次数

c#从linq join返回命名元组

我正在尝试在来自 nhibernate envers 的修订实体和包含用户名的列表之间执行连接。我想返回一个命名元组列表。

这是我的代码

public IEnumerable<(Societa company, DateTime datetime, string userName)> CompanyHistory()
{
    IAuditReader auditReader = this._session.Auditer();
    var revison = auditReader.CreateQuery().ForHistoryOf<Societa, RevisionEntity>().Results();
    IList<Persona> user = _session.QueryOver<Persona>().List();

    var query = revison.Join(user,
                        rev => rev.RevisionEntity.IdUtente,
                        us => us.Id,
                        (rev, us) => new
                        {
                            Oggetto = rev.RevisionEntity,
                            DataModifica = rev.RevisionEntity.RevisionDate.ToLocalTime(),
                            NomeUtente = us.NomePersona
                        }).ToList();
}
Run Code Online (Sandbox Code Playgroud)

但现在我没有找到返回元组的方法

  • 演员表没用
  • ToValueTuple 无法用于我的查询对象

我也试试

(ele, p) => new (OutputGA Oggetto, DateTime DataModifica, string NomeUtente)
            {
                Oggetto = ele.RevisionEntity,
                DataModifica = ele.RevisionEntity.RevisionDate.ToLocalTime(),
                NomeUtente = p.NomePersona
            }).ToList();
Run Code Online (Sandbox Code Playgroud)

但我得到了 …

c# linq nhibernate tuples nhibernate-envers

2
推荐指数
1
解决办法
1178
查看次数