Hibernate3 を使用した次のコードがあります。
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
}
休止状態のクエリ結果を直接操作しているため、これは正常に機能します。ただし、後で使用できるように、queryResult を文字列にシリアル化する必要もあります。Jackson の 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 をオブジェクト配列にキャストできないと不平を言っています。
jackson hibernate モジュールを使用しようとしましたが、それも役に立ちませんでした。私の質問は次のとおりです。a) JSON シリアライゼーションでこれを行う正しい方法は何ですか? b) Jackson がそれを arraylist にデシリアライズするのはなぜですか?