首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate和FlexJSON出现延迟初始化错误

Hibernate和FlexJSON出现延迟初始化错误
EN

Stack Overflow用户
提问于 2012-12-07 02:47:23
回答 2查看 2K关注 0票数 1

我在尝试用FlexJSON序列化JPA/Hibernate实体时遇到一个非常奇怪的错误。对象本身没有什么特别之处,只是字段和其他对象之间的关系。

代码语言:javascript
复制
Caused by: flexjson.JSONException: Error trying to deepSerialize
    at flexjson.transformer.ObjectTransformer.transform(ObjectTransformer.java:61)
    at flexjson.transformer.TransformerWrapper.transform(TransformerWrapper.java:22)
    at flexjson.transformer.ObjectTransformer.transform(ObjectTransformer.java:49)
    at flexjson.transformer.TransformerWrapper.transform(TransformerWrapper.java:22)
    at flexjson.transformer.ObjectTransformer.transform(ObjectTransformer.java:49)
    at flexjson.transformer.TransformerWrapper.transform(TransformerWrapper.java:22)
    at flexjson.transformer.ObjectTransformer.transform(ObjectTransformer.java:49)
    at flexjson.transformer.TransformerWrapper.transform(TransformerWrapper.java:22)
    at flexjson.JSONContext.transform(JSONContext.java:73)
    at flexjson.JSONSerializer.serialize(JSONSerializer.java:377)
    at flexjson.JSONSerializer.serialize(JSONSerializer.java:235)

Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at flexjson.BeanProperty.getValue(BeanProperty.java:102)
    at flexjson.transformer.ObjectTransformer.transform(ObjectTransformer.java:37)
    ... 89 more
Caused by: java.lang.IllegalStateException: Cannot call isReadOnlyBeforeAttachedToSession when isReadOnlySettingAvailable == true
at org.hibernate.proxy.AbstractLazyInitializer.isReadOnlyBeforeAttachedToSession(AbstractLazyInitializer.java:308

从阅读其他(稀疏)帖子和查看代码来看,这似乎是懒惰初始化的问题。这种情况在极少数情况下会重复发生,但这些情况是可重复的。我的猜测是,由于它看起来是有状态的,这是与数据有关的东西,但我真的不知道为什么数据会导致这种异常,特别是因为它是如此罕见。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-07 06:12:11

可能您的实体对象有一个“延迟加载”属性,该属性仅在访问时由数据库中的值填充。如果hibernate会话在杀菌(访问该属性)时已经关闭,您将获得延迟初始化异常。

要消除此异常,您可能需要执行以下操作之一:

  • 确保hibernate会话在访问延迟加载属性时未关闭(序列化)
  • 在会话关闭之前初始化延迟加载属性,以便即使会话关闭也不需要db访问
  • 使它们不‘延迟加载’
  • 根本不序列化延迟加载属性<

>F29

票数 3
EN

Stack Overflow用户

发布于 2015-03-11 23:05:49

我所经历的解决它的最好的事情是,在你做深度序列化之前,你需要把像HashMap,列表,映射或任何要序列化的数据放到HashMap中,然后尝试深度序列化那个bean。你会发现这个诀窍是100%有效的。

赛义德·沙赫扎德

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13750402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档