在 ArrayList 中链接两个 ArangoDB 集合时出现反序列化问题

Deserialization issue while linking two ArangoDB collection in ArrayList

我有两个数据库集合 Agency & Program,其中一个 Agency 可以有很多 programs 并且所有进一步的概念实现仅使用程序。所以我创建了两个 POJO

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;

有没有办法处理这种情况下的列表? 请提出一种方法来克服这个问题.. 谢谢:)

在您的 POJO Program 中,您有一个来自类型 Agency 的字段 agency,但在您从 DB 获得的 JSON 中,该字段来自类型字符串。将类型 Agency 更改为 String 并且您的代码有效。

更新:

要从适合当前 java bean 的查询中获取结果,运行:

for a in AGENCY return merge(a, {PROGRAMS: (for p in PROGRAMS FILTER p.AGENCY == a._id return merge(p, {AGENCY: a}))})