我有3张桌子。 LOV,SYS和规则。使用@Model将Sys表映射到我的应用程序中的一个编辑器的View Controller。现在在编辑器中我必须显示3列
在sys表中有一列Char_value,它包含AppID,还有错误消息。 在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");
我将sys表的对象作为OSC,因为它与VC映射,因此必须拥有OSC中的所有内容。同样在第二个查询中我试图在同一结果集中获取错误和corr消息。将进程名称作为参数传递。
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);
}
您是否可以建议我如何进行制图,注意这项工作。
答案 0 :(得分:0)
如果你正在使用EclipseLink JPA实现 - 有一个@Convert
- 注释,也许会有所帮助。有一个类似的复杂问题,其中列由列名和位值连接,转换器工作得很好。
如何使用转换器,请参阅: http://wiki.eclipse.org/Using_EclipseLink_JPA_Extensions_(ELUG)#Using_EclipseLink_JPA_Converters