我有兩個db集合Agency & Program
其中Agency
可能有許多programs
,所有進一步的概念實現僅使用程序。所以,我創建了兩個POJO在ArrayList中鏈接兩個ArangoDB集合時的反序列化問題
public class Agency implements Serializable {
@DocumentField(DocumentField.Type.ID)
private String agencyId;
@DocumentField(DocumentField.Type.KEY)
@SerializedName("AGENCYNAME")
private String agencyName;
@SerializedName("SHORTNAME")
private String shortName;
@Expose(serialize = false, deserialize = true)
@SerializedName("PROGRAMS")
private List<Program> programs;
// Other fields with Getter & Setters
}
public class Program implements Serializable {
@DocumentField(DocumentField.Type.ID)
private String programId;
@SerializedName("PROGRAMNAME")
private String programName;
@DocumentField(DocumentField.Type.KEY)
@SerializedName("SHORTNAME")
private String shortName;
@SerializedName("AGENCY")
private Agency agency;
// Other fields with Getter & Setters
}
當我運行AQL : for a in AGENCY return merge(a, {PROGRAMS: (for p in PROGRAMS FILTER p.AGENCY == a._id return p)})
我獲得以下JSON
[
{
"AGENCYNAME": "Dummy Agency 1",
"SHORTNAME": "DA1",
"_id": "AGENCY/1062620",
"_key": "1062620",
"_rev": "_URnzj-C---",
"PROGRAMS": [
{
"_key": "DA1DP1",
"_id": "PROGRAMS/DA1DP1",
"_rev": "_UQ6dGOG---",
"AGENCY": "AGENCY/1062620",
"PROGRAMNAME": "DA1 Dummy Program 1",
"SHORTNAME": "DA1DP1"
}
]
},
{
"AGENCYNAME": "Dummy Agency 2",
"SHORTNAME": "DA2",
"_id": "AGENCY/1062358",
"_key": "1062358",
"_rev": "_URnzj-C---",
"PROGRAMS": [
{
"_key": "DA2DP1",
"_id": "PROGRAMS/DA2DP1",
"_rev": "_UQ6dGOG---",
"AGENCY": "AGENCY/1062358",
"PROGRAMNAME": "DA2 Dummy Program 1",
"SHORTNAME": "DA2DP1"
}
]
}
]
當我從arangodb-java-driver 4.1
運行此查詢,它拋出,而反序列化 com.arangodb.velocypack.exception.VPackValueTypeException: Expecting type OBJECT
,如果我從Agency.java註釋這些行它工作正常,但我需要有在代理中列出。
@Expose(serialize = false, deserialize = true)
@SerializedName("PROGRAMS")
private List<Program> programs;
有沒有辦法在這種情況下處理列表? 請提出一個方法來克服這個.. 謝謝:)
是的,它的工作原理在這種情況下,但我想有一個交叉參考機構在計劃,否則我將不得不打另一個AQL來獲得代理機構,它會以過於頻繁的方式影響應用程序。有沒有辦法做到這一點?沒有打到太多的AQL來獲得交叉引用? – Raja
更新了我的答案 – mpv1989