当前位置: 首页 > 知识库问答 >
问题:

使用haschanged查询审核表时获取错误

蒙华翰
2023-03-14

我有模板实体,它具有:

@ManyToOne
    @JsonView(JsonDefinitionMapper.SecondLevel.class)   
    @Audited
    private TemplateType templateType;
for(String property:PropertiesList){
newValue = auditReader.createQuery()
                                            .forRevisionsOfEntity(Template.class, false, true)
                                            .addProjection(AuditEntity.property(property))
                                            .add(AuditEntity.property(property).hasChanged())
                                            .add(AuditEntity.id().eq(templateId))
                                            .add(AuditEntity.revisionNumber().eq(revisionNumber)).getSingleResult();
}

我正在使用postgres数据

共有1个答案

车靖琪
2023-03-14

我最初的想法是利用Envers5.2中添加的新的关系遍历API,通过它可以编写如下所示的查询:

final List results = auditReader.createQuery()
  .forEntitiesModifiedAtRevision( Template.class, revNo )
  .traverseRelation( "templateType", JoinType.INNER )
    .addProjection( AuditEntity.selectEntity( false ) )
    .up()
  .add( AuditEntity.property( "templateType" ).hasChanged() )
  .getResultList();

这里的想法是,我们基本上要求在结果列表中返回TemplateType,但前提是它被认为是在根实体Template上修改的;但是,这个查询引入了我认为是一个bug:

org.hibernate.QueryException:未设置命名参数[revision]

因此,目前,我唯一的建议是,如果您的实体类有超出基本类型属性的任何内容,您可能需要在代码中使用反射,从返回的bean实际获取值

final List results = auditReader.createQuery()
  .forEntitiesModifiedAtRevision( Template.class, revNo )
  .add( AuditEntity.property( propertyName ).hasChanged() )
  .getResultList();

对于列表中的条目,您需要使用反射为propertyname标识的适当属性调用适当的getter。它并不理想,但至少避免了您面临的查询问题。

 类似资料:
  • 问题内容: 假设我有两个表,其中一个表包含名为column_period的以下列: tenant_trading_name,suite_id,lease_id,building_id 另一个名为lease_period_audit,具有以下内容: audit_date,audit_type,tenant_trading_name,suite_id,lease_id,building_id 每次在l

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

  • 我写了一个查询 我在中设置了 2018-05-08 19:22:27.675错误1259--[nio-8080-exec-4]O.A.C.C.C.[.[.[/].[dispatcherServlet]:路径为[]的上下文中servlet[dispatcherServlet]的servlet.Service()引发异常[请求处理失败;嵌套异常为org.springframework.dao.inva

  • 接口说明 审核用户的注册申请 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 POST /api/user/1.0.0/check 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 guid string form 是 用户ID status int form 是 用户状态[0:未审核;1:已审核] 响应字段说明 无 响应

  • 我试图在我的spring boot应用程序中配置mongodb审核,在尝试持久化我的域类时出现了这个错误: 和我的域类:

  • 描述 (Description) 如果属性自上次set发生更改,则返回true。 语法 (Syntax) model.hasChanged(attribute) 参数 (Parameters) attribute - 它定义模型的属性。 例子 (Example) <!DOCTYPE html> <head> <title> Model Example</title>