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;
}
}
});
}
------
分享到:
相关推荐
- `javassist.jar`: Hibernate使用此库动态生成字节码,实现延迟加载等功能。 - `junit.jar`: 测试框架,用于单元测试。 在实际项目中,SSH整合涉及的jar包远不止这些,还需要数据库驱动(如mysql-connector-java....
6. **commons-logging-1.2.jar**:Apache Commons Logging是一个轻量级的日志接口抽象层,允许最终的日志实现被延迟加载。在处理JSON时,可能会用到这个库来记录程序执行过程中的信息,便于调试和问题定位。 使用...
此外,它提高了对延迟加载和缓存策略的控制,有助于减少数据库的交互次数,提高应用性能。 SSH整合的核心在于如何将这三个框架协调工作。Spring作为核心容器,管理其他组件的生命周期和依赖关系。Struts负责视图和...
Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...
Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...
Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...
Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...
Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...
Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...
Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...
Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...
Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...
Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...
Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...
Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...
Chronicle 是一个超低延迟、高吞吐、持久化的消息和事件驱动的内存数据库,延迟只有16纳秒以及支持每秒钟 500-2000 万消息/记录。 google-api-translate-java(Java 语言对Google翻译引擎的封装类库) 语音识别程序 ...
简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对IT的憧憬、向往!...