2016-12-26 63 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