`

json-lib hibernate 延迟加载 问题

阅读更多
json-lib hibernate 延迟加载 问题

------
问题:

用 json-lib 将 hibernate 延迟加载 的对象 转化为 json 时,会包 session 关闭的错误,

------
解决:

可以用 json-lib 的 JsonConfig 过滤掉 不需要的属性,利用 PropertyFilter 的 apply 方法进行过滤判断,

PropertyFilter 的 apply(Object source, String name, Object value) 方法:
* 参数:
      * source      属性所属的对象
      * name            属性的名字
      * value            属性的值
* 返回值:
      true      过滤掉
      false      保留
*

注意:
      判断 属性名 name 参数时,应当用 proxy 方式获得 Field 对象,然后再判断,不要直接用 name 判断,那样会导致延迟加载报错,

技巧:
      如果要排除1个属性,则先判断 source 的类型,然后 获得 name 对应的 Field 对象,再判断其类型,

------
例子:

* Goods.java 中排除 "GoodsType type" 属性

      /** 用于 goods 的 json config */
      public static JsonConfig jsonConfig = new JsonConfig();
      static {
            jsonConfig.setJsonPropertyFilter(new PropertyFilter() {
                  public boolean apply(Object source, String name, Object value) {
                        if (source.getClass() == Goods.class) { // 过滤掉  Goods 中的 GoodsType
                              Field declaredField = null;
                              try {
                                    declaredField = source.getClass().getDeclaredField(name);
                              } catch (NoSuchFieldException e) {
                                    e.printStackTrace();
                              }
                              if (declaredField.getType() == GoodsType.class) {
                                    return true;
                              } else {
                                    return false;
                              }
                        } else {
                              return false;
                        }
                  }
            });
      }

------
分享到:
评论

相关推荐

    SSH整合spring3.2+strut2.3.4+hibernate4.2所需jar包

    - `javassist.jar`: Hibernate使用此库动态生成字节码,实现延迟加载等功能。 - `junit.jar`: 测试框架,用于单元测试。 在实际项目中,SSH整合涉及的jar包远不止这些,还需要数据库驱动(如mysql-connector-java....

    JSONObject所需所有jar包

    6. **commons-logging-1.2.jar**:Apache Commons Logging是一个轻量级的日志接口抽象层,允许最终的日志实现被延迟加载。在处理JSON时,可能会用到这个库来记录程序执行过程中的信息,便于调试和问题定位。 使用...

    ssh框架整合jar包

    此外,它提高了对延迟加载和缓存策略的控制,有助于减少数据库的交互次数,提高应用性能。 SSH整合的核心在于如何将这三个框架协调工作。Spring作为核心容器,管理其他组件的生命周期和依赖关系。Struts负责视图和...

    java开源包1

    Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

    java开源包10

    Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

    java开源包11

    Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

    java开源包2

    Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

    java开源包3

    Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

    java开源包6

    Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

    java开源包5

    Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

    java开源包4

    Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

    java开源包8

    Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

    java开源包7

    Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

    java开源包9

    Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

    java开源包101

    Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

    Java资源包01

    Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...

    JAVA上百实例源码以及开源项目源代码

    简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对IT的憧憬、向往!...

Global site tag (gtag.js) - Google Analytics