2015-11-16 27 views
0

我试图从JIRA检索和处理代码,不幸的是,这些信息片断(它们在Metadata-Plugin中)保存在列中,而不是行中。 Picture of JIRA-MySQL-Database将几列从sql映射到java对象

我们的目标是在对象保存这个具有以下属性:

public class DesiredObject { 
    private String Object_Key; 
    private String Aze.kunde.name; 
    private Long Aze.kunde.schluessel; 
    private String Aze.projekt.name; 
    private Long Aze.projekt.schluessel 
    //getters and setters here 
} 

我的工作台是STS,这是一个弹簧启动的应用程序。 我可以用获取与JRJC对象键列表:

JiraController jiraconnect = new JiraController(); 
List<JiraProject> jiraprojects = new ArrayList<JiraProject>(); 
jiraprojects = jiraconnect.findJiraProjects(); 

这是完美的工作,也是USER_KEY和USER_VALUE都易于获取,但我希望有比执行 三个SQL更好的办法 - 为每个项目搜索,然后以某种方式从所有这些列表中构建一个对象。

我与

for (JiraProject jp : jiraprojects) { 
      String SQL = "select * from jira_metadata where ENRICHED_OBJECT_KEY = ?"; 
      List<DesiredObject> do = jdbcTemplateObject.query(SQL, new Object[] { "com.atlassian.jira.project.Project:" + jp.getProjectkey() }, XXX); 
     } 

开始获得与每个对象名单,但我坚持,因为我不能想出一个ObjectMapper(XXX)是谁能够写入到一个对象这一点。

平时我去

object.setter(rs.getString("SQL-Column")); 

但不工作,因为我的所有列被称为相同。 (USER_KEY & USER_VALUE)

数据库是由JIRA自动创建的,所以我无法“修复”它。 Object_Keys是唯一的,这就是为什么我试图使用这些来从我的SQL表中收集所有数据的原因。

我希望你所需要的所有启发我都是在这篇文章中,如果不能随时索取更多!

编辑:不要担心,如果有一些“项目”和“PROJEKT”,那是因为我给我的大部分班德的名字和描述..

回答

0

我创建与Objectkey和唯一一个HashMap标记括号中,例如:“(1)JIRA”。

String SQL = "select * from ao_cc6aeb_jira_metadata"; 
List<JiraImportObjekt> jioList = jdbcTemplateObject.query(SQL, new JiraImportObjektMapper()); 
    HashMap<String, String> hmap = new HashMap<String, String>(); 
    Integer unique = 1; 
    for (JiraImportObjekt jio : jioList) { 

     hmap.put("(" + unique.toString() + ")" + jio.getEnriched_Object_Key(), 
       jio.getUser_Key() + "(" + jio.getUser_Value() + ")"); 
     unique++; 
    } 

我变成一个TreeMap

Map<String, String> tmap = new TreeMap<String, String>(hmap); 

然后,我通过

String aktuProj = new String(); 
for (String s : tmap.keySet()) { 
     if (aktuProj.equals(s.replaceAll("\\([^\\(]*\\)", ""))) { 

     } else { //Add Element to list and start new Element } 
//a lot of other stuff 
} 

通过树形图迭代这个我所做的就是把所有的数据在正确的顺序,迭代通过并处理所有我想要的东西。

Object hinfo = hmap.get(s); 
     if (hinfo.toString().replaceAll("\\([^\\(]*\\)", "").equals("aze.kunde.schluessel")) { 
      Matcher m = Pattern.compile("\\(([^)]+)\\)").matcher(hinfo.toString()); 
      while (m.find()) { 
       jmo[obj].setAzeKundeSchluessel(Long.parseLong(m.group(1), 10)); 
       // logger.info("AzeKundeSchluessel: " + 
       // jmo[obj].getAzeKundeSchluessel()); 
      } 
     } else ... 

循环后我需要添加最后一个元素。 现在我有一个列表元素易于使用和准备进一步的步骤。

我剪掉了很多代码,因为它大部分是为我的问题定制的..路线图应该足以解决它。

祝你好运!