【发布时间】:2011-03-16 01:30:25
【问题描述】:
在我的应用程序中,我有几个经过审计的实体类,例如以下。
它包含与具有各种休眠注释的其他实体的多个 HAS-IS 关系。
我正在使用以下代码片段分析审计跟踪, 它返回审计表实体的所有属性值。
公共列表< AuditTrailForm> getAuditTrailEntries(Class< ?> clazz, Serializable id) { AuditReader 阅读器 = AuditReaderFactory.get(this.getSession()); 列表 revNumbers = reader.getRevisions(clazz, id); 列出< AuditTrailForm> forms = new ArrayList(); 迭代器 it = revNumbers.iterator(); 而(it.hasNext()){ 编号项 = it.next(); 对象 obj = reader.find(clazz, id, item); AuditInfo 修订 = reader.findRevision(AuditInfo.class, item); BeanMap beanMap = new BeanMap(obj); HashMap map = new HashMap(); 设置键 = beanMap.keySet(); 迭代器 keyIterator = keys.iterator( ); 而(keyIterator.hasNext()){ String propertyName = (String) keyIterator.next(); if (beanMap.getType(propertyName).equals(String.class)) { String propertyValue = (String) beanMap.get( propertyName ); map.put(propertyName, propertyValue); } } 创建日期At = revision.getTimestamp(); 字符串用户 = 修订.getUser(); AuditTrailForm form = new AuditTrailForm(user, createdAt, map); forms.add(form); } 退货表格; }工作正常,但是这没有考虑遍历类中的关系。
我能不能开发一种递归算法,检测对象属性的类型,然后进行递归调用?
有没有更好的方法可以做到这一点?
【问题讨论】:
-
我理解审计,但我对 beanMap 的用途以及为什么要提取字符串值属性感到有点困惑。你能解释一下你想要达到的目标吗?
-
最终我想要一个父子实体的“日期、用户、旧值、新值”的映射。问题是,如果我有休眠关系 C ->
B 并且有人更改了 B 实体中的某些内容以及从 C 实体创建的新修订版,但我没有任何方法可以遍历 B 实体来自 C 版本。
标签: java hibernate hibernate-envers