2つのMysqlテーブルで表される階層から応答としてJSONオブジェクトを返すためにSpringを使用しています。Javaを使用してJSONオブジェクトにmysql階層を取得するときに重複したノード
------------ -----------------
| Concepts | | Relationships |
|----------| |---------------|
| id | | relation_id |
| title | | concept_id_1 |
------------ | concept_id_2 |
-----------------
私はconcept
のすべての子を返すメソッドgetChildren
を持ってこれを行うために。
私は、以下のようにこれらのメソッドを使用して、mysqlから階層構造を取得しています。
public String getPath(Concept concept, Set<Concept> children){
if (children.size() > 0){
Set<Concept> newNodes = new HashSet<>();
ArrayList<String> returnedStrings = new ArrayList<>();
String currentString = getChildrenString(concept, children);
return currentString;
}
return getMainString(concept, "");
}
public String getChildrenString(Concept concept, Set<Concept> children){
ArrayList<String> returnedStrings = new ArrayList<>();
for (Concept node : children){
String currentString = "{'id':" + concept.getId() + ","
+ "'title':'" + concept.getDescription() + "',"
+ "'nodes':[" + getPath(node, getChildrens(node)) + "]}";
returnedStrings.add(currentString);
}
StringBuilder fullList = new StringBuilder();
for (String s: returnedStrings){
fullList.append(s+"");
}
return fullList.toString();
}
public String getEmptyString(Concept concept){
return "{'id':"+ concept.getId() + ","
+ "'title':'" + concept.getDescription() + "',"
+ "'nodes': []}";
}
それはすべての既知の概念から、ここから始まります。
String test = getPath(concept, children);
私は特定の概念のために期待してい正しい応答は次のようにされています。しかし、このコードは、ノードが重複している次の文字列を返して
{
'id': 160000,
'title': 'root',
'nodes': [{
'id': 160039,
'title': 'Therapeutic Uses',
'nodes': [{
'id': 160001,
'title': 'Anti-Allergic Agents',
'nodes': []
}, {
'id': 160002,
'title': 'Anti-Infective Agents',
'nodes': [{
'id': 160004,
'title': 'Anti-Infective Agents, Local',
'nodes': [{
'id': 160015,
'title': 'Hands Sanitizers',
'nodes': []
}]
}]
}]
}]
}
、と私は理由を理解することはできませんこれは起こっているか、再帰のどの部分がこの問題を引き起こしているかです。
という概念がこのコードから返された回答で繰り返されています。
{
'id': 160000,
'title': 'root',
'nodes': [{
'id': 160039,
'title': 'Therapeutic Uses',
'nodes': [{
'id': 160001,
'title': 'Anti-Allergic Agents',
'nodes': []
}]
}, {
'id': 160039,
'title': 'Therapeutic Uses',
'nodes': [{
'id': 160002,
'title': 'Anti-Infective Agents',
'nodes': [{
'id': 160004,
'title': 'Anti-Infective Agents, Local',
'nodes': [{
'id': 160015,
'title': 'Hands Sanitizers',
'nodes': []
}]
}]
}]
}]
}
私のコードでこの原因が考えられますが、どうすれば正しい応答を得ることができますか?