【问题标题】:Envers - Showing audit data with relationshipsEnvers - 显示带有关系的审计数据
【发布时间】:2013-04-03 17:59:43
【问题描述】:
  • 我在我的实体中添加了@Audited
  • 我创建了侦听器以将用户 ID 添加到 revinfo
  • 我可以使用用户 ID、实体类、最小和最大日期过滤审计数据,使用:

    public <T extends BaseModel> List<Object[]> buscar(Class<T> clazz, Usuario usuario, java.util.Date inicio, java.util.Date fim){
    GregorianCalendar novo = new GregorianCalendar();
    novo.setTime(fim);
    novo.add(Calendar.DAY_OF_MONTH, 1);
    
    AuditReader reader = AuditReaderFactory.get(getEm());
    return reader.createQuery()
        .forRevisionsOfEntity(clazz, false, true)
        .add(AuditEntity.revisionProperty("usuario")
            .eq(usuario))
        .add(AuditEntity.revisionProperty("revtstmp")
            .between(inicio.getTime(), novo.getTime().getTime()))
        .addOrder(AuditEntity.property("id")
            .asc())
        .getResultList();
    
    }
    

但是所有的关系都是懒惰的,包括@ManyToOne

我发现很多关于@OneToMany 问题的帖子,但事实并非如此

如何访问这些属性?

PS:我试过了,但无法突出显示代码。

【问题讨论】:

    标签: java hibernate spring-mvc hibernate-envers


    【解决方案1】:

    Envers 返回的对象中的所有关系都是惰性的,无论是一对多还是多对一。

    在一个对象中,要访问相关对象的属性,只需调用 getter :)

    在查询中,这是不可能的。不支持连接,无论关系类型如何。您只能限制相关实体的 id,但不能限制其属性。

    【讨论】:

    • 所以解决方案是通过ID选择实体来进行新查询,对吧?
    • @adamw 你能给我看一下代码示例吗?因为我也有同样的问题。但是我的对象是空的,但是当我调试时,一个名为 handler 的类方法有 id。
    【解决方案2】:

    从 hibernate-envers 的 4.x 版本开始,您不需要配置监听器。您可以使用@Audited 轻松审核实体。

    【讨论】:

      猜你喜欢
      • 2015-01-21
      • 2013-02-08
      • 2012-02-24
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 2015-12-14
      • 1970-01-01
      相关资源
      最近更新 更多