2016-12-26 64 views
0

我有两个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; 

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

回答

1
在你的POJO

Program你有一个领域的机构是从Agency类型,但你从数据库中获取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}))})

+0

是的,它的工作原理在这种情况下,但我想有一个交叉参考机构在计划,否则我将不得不打另一个AQL来获得代理机构,它会以过于频繁的方式影响应用程序。有没有办法做到这一点?没有打到太多的AQL来获得交叉引用? – Raja

+0

更新了我的答案 – mpv1989