尝试使用FlexJSON序列化JPA / Hibernate实体时,我遇到了一个非常奇怪的错误。对象本身并不花哨;只是字段和其他对象之间的关系。
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
从阅读其他(稀疏)帖子并查看代码看起来这是一个懒惰初始化的问题。这种情况在极少数情况下会反复发生,但这些情况是可重复的。我的猜测是因为它似乎是有状态的,它与数据有关,但我真的不知道为什么数据会导致这种异常,特别是因为它是如此罕见。
答案 0 :(得分:3)
可能您的实体对象具有“延迟加载”属性,这些属性仅在访问时填充了数据库中的值。如果在绝育(访问该属性)时休眠会话已经关闭,您将获得延迟初始化异常。
要摆脱此异常,您可能需要执行以下操作之一:
答案 1 :(得分:0)
我遇到的最好的事情是解决它,在进行深度序列化之前,你需要将数据,如bean,list,map或任何要序列化的数据放入HashMap,然后尝试深度序列化HashMap。你会看到诀窍是100%工作。
Syed Shahzad