我有以下代碼使用Hibernate3。Jackson Json序列化多個Hibernate對象
List queryResult = session.createQuery("SELECT A, B from A, B where A.id = B.id");
for (Object o: queryResult) {
Object[] array = (Objec[]) o;
A a = (A) array[0];
B b = (B) array[1];
//do work
}
這很好,因爲我操作直接對hibernate查詢結果。但是,我也想將queryResult序列化爲一個字符串,以便稍後使用它。我嘗試以下使用傑克遜的JSON庫:
ObjectMapper m = new ObjectMapper()
final String queryResultString = m.writeValueAsString(queryResult);
再後來我嘗試讀取和反序列化從Json的字符串返回到Hibernate的查詢結果,這是當我打的麻煩。讀取代碼:
List r = m.readValue(queryResultString, List.class);
for (Object o: r) {
Object[] array = (Objec[]) o;
A a = (A) array[0];
B b = (B) array[1];
//do work
}
Object []的轉換抱怨無法將ArrayList轉換爲對象數組。
我試圖使用傑克遜休眠模塊,但這也沒有幫助。所以我的問題是:a)JSon序列化的正確方法是什麼? b)爲什麼傑克遜將其反序列化爲數組列表?
2)不工作 - 它沒有傳遞對象[ ]鑄造語句,但實際鑄造對象(A)數組[0]失敗,出現異常:不能將LinkedHashMap轉換爲A. 3)Genson沒有工作,因爲它未能序列化A. –
1)你的A和B是傑克遜默認並不知道什麼類型的反序列化的複雜類型。這就是爲什麼他反序列化到一個地圖。2)你能展示你的objets是什麼樣子嗎?我很驚訝序列化失敗... – eugen
A和B是hibernate對象 - 即使用hibernate查詢mysql返回的對象。我認爲序列化可能會丟失類信息,並試圖爲對象映射添加hibernateModule,但它也不起作用。 –