在我的应用程序中,我有几个经过审计的实体类,例如以下。
它包含与具有各种休眠注释的其他实体的多个 HAS-IS 关系。
@实体 @已审核 公共类实体实现可序列化{ 私有静态最终长序列版本UID = 1L; @ID 私有整数 ID; @ManyToMany 私人设置 <Country> 受影响的国家; @OneToOne 私人影响力; @Enumerated(EnumType.STRING) 私有所有者所有者; ... }
我正在使用以下代码片段分析审计跟踪,它从审计表实体返回所有属性值。
公共列表< AuditTrailForm> getAuditTrailEntries(Class< ?> clazz, Serializable id) { AuditReader 阅读器 = AuditReaderFactory.get(this.getSession()); 列表 <编号> revNumbers = reader.getRevisions(clazz, id); List< 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); } 退货表格; }
工作正常,但这并没有考虑到遍历类中的关系。
我能否以某种方式开发一种递归算法,该算法将检测对象属性的类型,然后进行递归调用?
有没有更好的方法可以完全做到这一点?