在我的应用程序中,我有几个审核的实体类,例如以下。
它包含具有各种休眠注释的与其他实体的多个HAS-IS关系。

@实体
@审核
公共类Entity实现Serializable {

    私有静态最终长serialVersionUID = 1L;

    @ID
    私人整数ID;

    @多多多
    私有集受影响的国家;

    @OneToOne
    私人影响

    @Enumerated(EnumType.STRING)
    私人业主;

    ...
}


我正在使用以下代码片段分析审计线索,
从审核表实体返回所有属性值。

public List getAuditTrailEntries(Class clazz,可序列化的ID){
        AuditReader reader = AuditReaderFactory.get(this.getSession());
        列表 revNumbers = reader.getRevisions(clazz,id);
        List 表单= new ArrayList();
        Iterator it = revNumbers.iterator();

        while(it.hasNext()){

            编号项目= it.next();
            对象obj = reader.find(clazz,id,item);
            AuditInfo版本= reader.findRevision(AuditInfo.class,item);

            BeanMap beanMap =新BeanMap(obj);
            HashMap map = new HashMap();

            设置键= beanMap.keySet();
            迭代器keyIterator = keys.iterator();

            while(keyIterator.hasNext()){
               字符串propertyName =(String)keyIterator.next();

                如果(beanMap.getType(propertyName).equals(String.class)){
                   字符串propertyValue =(String)beanMap.get(propertyName);
                      map.put(propertyName,propertyValue);
                }
            }
            创建日期= =版本.getTimestamp();
            字符串用户= version.getUser();

            AuditTrailForm表单=新的AuditTrailForm(用户,createdAt,地图);
            form.add(form);
        }
        退货表格;
}
  

效果很好,但是这并未考虑遍历类中的关系。我能以某种方式开发一种递归算法,该算法将检测对象属性的类型,然后进行递归调用吗?也许有更好的方法可以完全做到这一点?

最佳答案

一种更简单的方法...

我假设保存到对象树发生在事务中。您可以修改审核表以为每个事务添加一些唯一的标识符。

这样,您就可以将审核历史记录作为一组变更集进行浏览-例如查看单个交易中进行的所有更改。

不太符合您的要求,但是更容易实现并带来很多好处。您要实现的内容将非常复杂。

09-26 19:53