2

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}]

これらは、そのエンティティのフィールド定義にすぎません。

4

0 に答える 0