0

私は3つのテーブルを持っています。LOV、SYS、およびルール。Sys テーブルは、@Model を使用して、アプリケーション内のエディターの 1 つの View Controller にマップされます。エディターで 3 つの列を表示する必要があります

  1. アプリ ID
  2. エラーメッセージ
  3. 訂正メッセージ

sys テーブルには、AppID とエラー メッセージを保持する Char_value 列が 1 つあります。Lov テーブルには、修正メッセージを保持するオプション値と呼ばれる列があります。だから私はデータを引き出すために次のクエリを書きました

Query qAppId = em.createQuery("select osc from OscaSysControl osc "+
                    " where osc.oscaControlRule.categoryName ='PROBLEM LOG' and osc.oscaControlRule.controlName = 'APPLICATION ID'");


Query ErrCorr= em.createQuery("select osc from OscaSysControl osc join osc.oscaControlRule oscr " +
                    "left outer join osc.oscaControlLov lov " + 
                    "where oscr.controlName = 'ERROR MESSAGE' and oscr.categoryName = 'PROBLEM LOG' " +
                    "and oscr.processName = :processName");

VC にマップされているため、OSC にすべてを含める必要があるため、sys テーブルのオブジェクトを OSC として作成しています。また、2番目のクエリで、同じ結果セットでエラーとcorrメッセージを取得しようとしています。プロセス名をパラメーターとして渡します。

res と res2 は SYS のタイプです

res = qAppId.getResultList();

次の for ループは、パラメータを 2 番目のクエリに渡します。BUT ITS GIVING ERROR " SYS と String は互​​換性がありません "

List<String> appID = new ArrayList<String>(); 
for (OscaSysControl o : res) { 
    appID.add((String)o.getAppId()); // explain ?
}

int appIDLength = appID.size();
for (int i=0; i<appIDLength; i++){
    q2.setParameter("processName",appID.get(i));
    q2.setParameter("processName", res.get(i).getOscaControlRule().getProcessName());
    res2 = q2.getResultList();
    resultErrCorr.add((OscaSysControl) res2); 
}

この作業を行うためのマッピング、注釈についてどうすればよいか教えてください。

4

1 に答える 1

0

EclipseLink JPA 実装を使用している場合は、@Convert-Annotation があり、おそらくそれが役立ちます。列が列名とビット値で結合されている同様の複雑な問題があり、コンバーターはうまく機能しました。

コンバーターの使用方法については、 http ://wiki.eclipse.org/Using_EclipseLink_JPA_Extensions_(ELUG)#Using_EclipseLink_JPA_Converters を参照してください。

于 2012-07-04T06:57:58.953 に答える