dataimporthandler のカスタム トランスフォーマーを作成したいと考えています。親エンティティの行にアクセスしたい。どうやってやるの。出来ますか?
@Override
public Object transformRow(Map<String, Object> row, Context context) {
LOG.info("##gyk: row: {}",row);
//******What to do here? ********
LOG.info("##gyk: PARENT-ROW: {}", ????);
return row;
}
アップデート
私の現在の回避策は、セッション変数を使用することです
@Override
public Object transformRow(Map<String, Object> row, Context context) {
if (context.isRootEntity()) {
Object tmp = row.get("Keywords");
if (tmp == null) return row;
String[] kwArray = tmp.toString().split(",");
HashSet<String> kwSet = new HashSet<String>(64);
for (String kw : kwArray) {
kwSet.add(kw.trim().toLowerCase());
}
LOG.info("##gyk: root entity kw: {}",kwSet);
context.setSessionAttribute("company-keywords-set", kwSet, "document");
} else {
LOG.info("##gyk: row: {}",row);
HashSet<String> companyKeywordSet = (HashSet<String>)context
.getParentContext().getParentContext()
.getSessionAttribute("company-keywords-set", "document");
if (companyKeywordSet != null) {
LOG.info("##gyk: keywords from parent: {}", companyKeywordSet);
}
}
return row;
}
アップデート
これをログに記録しようとするとcontext.getParentContext().getParentContext().getAllEntityFields()
、次のようになります。
[{multiValued=false, toWrite=true, indexed=true, name=id, column=FIR_NR, boost=1.0, defaultValue=null, stored=true, type=string}, {multiValued=false, toWrite=true, indexed=true, name=fir_name, column=FIR_NAME, boost=1.0, defaultValue=null, stored=true, type=text_general}]
これらは、そのエンティティのフィールド定義にすぎません。