json-lib hibernate遅延ロードの問題
json-lib hibernate遅延ロードの問題
------
質問:
json-libでhibernate遅延ロードのオブジェクトをjsonに変換するとsessionが閉じるエラーがパッケージされ、
------
解決:
json-libのJsonConfigで不要な属性をフィルタリングし、PropertyFilterのapply法でフィルタ判定することができ、
PropertyFilterのapply(Object source,String name,Object value)メソッド:
*パラメータ:
*ソース属性が属するオブジェクト
*name属性の名前
*value属性の値
*戻り値:
trueろ過
false保存
*
注意:
属性名nameパラメータを判断する場合は、proxy方式でFieldオブジェクトを取得してから判断し、直接nameで判断しないようにすると、遅延ロードエラーが発生し、
テクニック:
1つの属性を除外する場合は、ソースのタイプを判断してから、nameに対応するFieldオブジェクトを取得し、そのタイプを判断します.
------
例:
* Goods.JAvaでの「GoodsType type」属性の除外
------
------
質問:
json-libでhibernate遅延ロードのオブジェクトをjsonに変換するとsessionが閉じるエラーがパッケージされ、
------
解決:
json-libのJsonConfigで不要な属性をフィルタリングし、PropertyFilterのapply法でフィルタ判定することができ、
PropertyFilterのapply(Object source,String name,Object value)メソッド:
*パラメータ:
*ソース属性が属するオブジェクト
*name属性の名前
*value属性の値
*戻り値:
trueろ過
false保存
*
注意:
属性名nameパラメータを判断する場合は、proxy方式でFieldオブジェクトを取得してから判断し、直接nameで判断しないようにすると、遅延ロードエラーが発生し、
テクニック:
1つの属性を除外する場合は、ソースのタイプを判断してから、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;
}
}
});
}
------