0

我有 3 张桌子。LOV、SYS 和规则。Sys 表通过使用@Model 映射到我的应用程序中的编辑器之一的视图控制器。现在在编辑器中我必须显示 3 列

  1. 应用编号
  2. 错误信息
  3. 更正信息

在 sys 表中有一列 Char_value 包含 AppID,以及错误消息。在 Lov 表中有一个名为 option value 的列,其中包含更正消息。所以我写了以下查询来提取数据

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");

我正在将 sys 表的对象作为 OSC,因为它与 VC 映射,所以必须在 OSC 中拥有所有内容。同样在第二个查询中,我试图在同一结果集中获取错误和更正消息。传递进程名称作为参数。

res 和 res2 是 SYS 的类型

res = qAppId.getResultList();

下面的 for 循环是将参数传递给第二个查询。但它的错误“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 回答