日期:2014-05-18  浏览次数:20725 次

sssh+ajax中@JSON的问题?
我现在在做一个用extjs做前端的项目,全部请求都是用ajax访问 ,返回JSON数据。
本来这之前做过一些dom觉得没问题,可是越往后有些问题越搞不定。
前提:首先我知道在get方法上加上@JSON(serialize=false)的对象不会被转换成JSON对象。
现在列举我不会的问题,希望大家能够帮忙解决,因我本人确实是菜鸟,找的这家公司就我一个搞java的
问题一:
有二个类分别是Supplier(供应商),Type(类型)
public class Supplier {
private String supplier_id;
private String supplier_name;
private String supplier_username;
private String supplier_pwd;
private String supplier_person;
private String supplier_phone;
private String supplier_email;
private String supplier_desc;
private String supplier_address;
private Boolean supplier_isInner;
private Set<Type> supplierTypes; //供应商拥有的类型
private Set<Role> roles;//供应商拥有的角色
}


public class Type {
private String id;
private String text;
private Boolean leaf;
private Boolean checked;
private Set<Type> children;//类型拥有的子类型
private String pid;
private Set<Supplier> suppliers;//类型拥有的供应商
}

比如现在我要查询出一个供应商,比较简单的是把供应商下面两个属性的get方法加上@JSON(serialize=false)

@JSON(serialize=false)
public Set<Type> getSupplierTypes() {
return supplierTypes;
}
@JSON(serialize=false)
public Set<Role> getRoles() {
return roles;
}

查出结果是只有基本属性的对象:
{"model":{"supplier_address":"测试","supplier_desc":"测试","supplier_email":"abc@qq.com","supplier_id":"4028818344d488880144d4912ffd0001","supplier_isInner":null,"supplier_name":"测试","supplier_person":"测试","supplier_phone":"测试","supplier_pwd":"123456","supplier_username":"testtest"},"msg":false,"success":false}
现在我又想查询出供应商的supplierTypes
第一步去掉下面方法的@JSON

public Set<Type> getSupplierTypes() {
return supplierTypes;
}

然后我在查询的Dao中这么写

public Supplier searchSupplierById(String id) {
Supplier supplier = (Supplier) hibernateTemplate.get(Supplier.class, id);
supplier.getSupplierTypes();
return supplier;
}

结果:
1.failed to lazily initialize a collection of role: cn.com.su.domain.Supplier.supplierTypes, no session or session was closed
2.org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: cn.com.su.domain.Supplier.supplierTypes, no session or session was closed
3.org.apache.struts2.json.JSONException: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: cn.com.su.domain.Supplier.supplierTypes, no session or session was closed

org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: cn.com.su.domain.Supplier.supplierTyp