在 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}))})
我有两个数据库集合 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}))})