私のアプリケーションには、次のようないくつかの監査済みエンティティ クラスがあります。
さまざまな休止状態の注釈を持つ他のエンティティへの複数の HAS-IS 関係が含まれています。
@実在物 @監査済み public class Entity は Serializable { private static final long serialVersionUID = 1L; @ID プライベート整数 ID; にゃんにゃん プライベート セット < 国> 影響を受ける国; @OneToOne プライベート インパクト インパクト; @列挙型(EnumType.STRING) 個人の所有者 ... }
監査テーブル エンティティからすべての属性値を返す次のコード スニペットを使用して、監査証跡を分析しています。
public List< AuditTrailForm> getAuditTrailEntries(Class< ?> clazz, Serializable id) { AuditReader リーダー = AuditReaderFactory.get(this.getSession()); List < Number> revNumbers = reader.getRevisions(clazz, id); List< AuditTrailForm> フォーム = new ArrayList(); Iterator< Number> it = revNumbers.iterator(); while(it.hasNext()) { 番号項目 = it.next(); Object obj = reader.find(clazz, id, item); AuditInfo リビジョン = reader.findRevision(AuditInfo.class, item); BeanMap beanMap = new BeanMap(obj); HashMap マップ = 新しい HashMap(); キーを設定 = beanMap.keySet( ); イテレータ keyIterator = keys.iterator( ); while( keyIterator.hasNext( ) ) { String propertyName = (String) keyIterator.next( ); if (beanMap.getType(propertyName).equals(String.class)) { String propertyValue = (String) beanMap.get( propertyName ); map.put(propertyName, propertyValue); } } Date createdAt = Revision.getTimestamp(); 文字列ユーザー = Revision.getUser(); AuditTrailForm フォーム = 新しい AuditTrailForm(user, createdAt, map); forms.add(フォーム); } 返品フォーム; }
正常に動作しますが、これはクラス内のリレーションをトラバースすることを考慮していません。
オブジェクト属性のタイプを検出してから再帰呼び出しを行う再帰アルゴリズムを何らかの方法で開発できますか?
これを完全に行うためのより良い方法はありますか?