나는 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
}
최대 절전 모드 쿼리 결과에서 직접 작동하므로 정상적으로 작동합니다. 그러나 queryResult를 문자열로 serialize하여 나중에 사용할 수 있도록하려고합니다. 나는 다음과 같은 사용 잭슨의 JSON 라이브러리 시도 : 나는 문제를 쳤을 때 내가 읽고 쿼리 결과를 최대 절전 모드로 다시 JSON에서 문자열을 역 직렬화 할 나중에 그런
ObjectMapper m = new ObjectMapper()
final String queryResultString = m.writeValueAsString(queryResult);
, 즉이다. 읽기 코드 :
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) 잭슨은 그것을 왜 군대에게 비 직렬화 하는가?
2) 작동하지 않습니다) - 그것은 [개체를 통과 않았다 ] casting 문을 사용하지만 객체 (A) 배열 [0]의 실제 캐스팅이 예외로 실패했습니다. LinkedHashMap을 A로 캐스팅 할 수 없습니다. 3) Genson이 작동하지 않았습니다. A : –
을 직렬화하지 못했습니다. 1) A 및 B는 복잡한 유형입니다. Jackson은 기본적으로 어떤 형식으로 deserialize할지 모릅니다. 그게 그가지도로 비 순차 화 된 이유입니다.2) 당신의 오브제가 어떻게 생겼는지 보여줄 수 있습니까? 직렬화가 실패하는 것에 대해 매우 놀랐습니다 ... – eugen
A와 B는 최대 절전 모드 개체입니다. 즉, 최대 절전 모드를 사용하여 mysql을 쿼리하여 반환 된 개체입니다. 직렬화가 클래스 정보를 잃어 버릴 수도 있다고 생각하고 객체 mappper에 대해 hibernateModule을 추가하려고 시도했지만 작동하지 않았습니다. –