У меня возникла проблема с Gson, потому что он не может перейти к объектам Json HibernateProxy, поэтому я следовал этому руководству: ссылка на сайт
Это решает проблему typeAdapter с Gson, но теперь я получаю следующее исключение:
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
Я искал, как решить эту проблему, но решения, которые я нашел, в этом случае не работают.
Это мой код:
List<ContratoSolicitudFull> returnValue =
new SomeBL().getData(id, null, null,currentUserId);
Type type = new TypeToken<List<ContratoSolicitudFull>>() {}.getType();
Gson gson = new GsonBuilder()
.registerTypeAdapter(DateTime.class, new DateTimeJsonConverter())
.registerTypeAdapter(LocalDate.class, new LocalDateJsonConverter())
.registerTypeAdapterFactory(HibernateProxyTypeAdapter.FACTORY)
.create();
String jsonValue = gson.toJson(returnValue, type); //Here is where it fail
Любая идея?
Есть ли у вас какая-либо связанная сущность, которая FETCH_TYPE ленива




Посредством сериализации в json вы получаете доступ к извлеченным данным вне контекста сеанса.
Если вы использовали тот же код, что и в вашей ссылке, попробуйте изменить метод записи на этот.
@SuppressWarnings({"rawtypes", "unchecked"})
@Override
public void write(JsonWriter out, HibernateProxy value) throws IOException {
//avoid serializing non initialized proxies
if (value == null || !Hibernate.isInitialized(value)) {
out.nullValue();
return;
}
// Retrieve the original (not proxy) class
Class<?> baseType = Hibernate.getClass(value);
// Get the TypeAdapter of the original class, to delegate the serialization
TypeAdapter delegate = context.getAdapter(TypeToken.get(baseType));
// Get a filled instance of the original class
Object unproxiedValue = ((HibernateProxy) value).getHibernateLazyInitializer()
.getImplementation();
// Serialize the value
delegate.write(out, unproxiedValue);
}
|| !Hibernate.isInitialized(value) был добавлен, чтобы проверить, инициализирована ли коллекция, и, если нет, избегает доступа к ней.
Это тот же ответ, который я опубликовал в вопросе
вам нужно добавить || ! Hibernate.isInitialized (значение)
Посредством сериализации в json вы получаете доступ к извлеченным данным вне контекста сеанса.