Hibernate查询的数据转换为JSON

马林515 2013-06-25 12:47:15
本人使用Hibernate查询数据库得到一个集合然后想使用json lib将集合转换为json对象,来实现前台的ajax翻页
现在遇到的问题是
不使用属性过滤陷入属性级联的死循环

jsonArray = JSONArray.fromObject(usersList);

net.sf.json.JSONException: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.jzbr.entity.Groups.bbsusersList, no session or session was closed

使用属性过滤
JsonConfig config = new JsonConfig();
config.setExcludes(new String[]{"bbsusersList"});
jsonArray = JSONArray.fromObject(usersList);


net.sf.json.JSONException: There is a cycle in the hierarchy!

...全文
492 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
妞_ 2013-06-25
  • 打赏
  • 举报
回复
引用 8 楼 fatg1988 的回复:
引用 6 楼 wxy19910821 的回复:
那个注解我没有!怎么弄啊!好久没有写java了!(*^__^*) 嘻嘻
不是所有的地方都要延迟加载,可以手动加载的
这个就不晓得了啥,记得人家实在是这么给我讲的,当你用到子信息的时候,才会去加载,不用就不会去查选,还是很人性化的!
七神之光 2013-06-25
  • 打赏
  • 举报
回复
引用 6 楼 wxy19910821 的回复:
那个注解我没有!怎么弄啊!好久没有写java了!(*^__^*) 嘻嘻
不是所有的地方都要延迟加载,可以手动加载的
七神之光 2013-06-25
  • 打赏
  • 举报
回复
第一个就是你说的死循环, 第二个请注意config对象未作为参数使用进去
引用 楼主 malin1994512 的回复:
本人使用Hibernate查询数据库得到一个集合然后想使用json lib将集合转换为json对象,来实现前台的ajax翻页 现在遇到的问题是 不使用属性过滤陷入属性级联的死循环 jsonArray = JSONArray.fromObject(usersList); net.sf.json.JSONException: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.jzbr.entity.Groups.bbsusersList, no session or session was closed 使用属性过滤 JsonConfig config = new JsonConfig(); config.setExcludes(new String[]{"bbsusersList"}); jsonArray = JSONArray.fromObject(usersList); net.sf.json.JSONException: There is a cycle in the hierarchy!
话说燕子还会JAVA?给我加个关注啊 ,然后才能给你发私信的。
引用 6 楼 wxy19910821 的回复:
那个注解我没有!怎么弄啊!好久没有写java了!(*^__^*) 嘻嘻
妞_ 2013-06-25
  • 打赏
  • 举报
回复
那个注解我没有!怎么弄啊!好久没有写java了!(*^__^*) 嘻嘻
妞_ 2013-06-25
  • 打赏
  • 举报
回复
引用 4 楼 malin1994512 的回复:
额 我使用的是 Hibernate 注解方式查询的数据可以属性能直接设置延迟加载?
@Entity
@Component("users")
public class Users implements Serializable {
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue
	@Column(name = "id")
	private Integer id;
	@Column(name = "username", length = 16, nullable = false, unique = true)
	private String username;
	@Column(name = "password")
	private String password;
	@Column(name = "rDate")
	private Date rDate;
	@Column(name = "state")
	private byte state;
	@ManyToOne
	@JoinColumn(name = "roles_id")
	private Roles roles;
	@OneToOne(mappedBy = "users",cascade=CascadeType.ALL)
	private BBSUsers bbsUsers;
可以啊!
马林515 2013-06-25
  • 打赏
  • 举报
回复
额 我使用的是 Hibernate 注解方式查询的数据可以属性能直接设置延迟加载?
@Entity
@Component("users")
public class Users implements Serializable {
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue
	@Column(name = "id")
	private Integer id;
	@Column(name = "username", length = 16, nullable = false, unique = true)
	private String username;
	@Column(name = "password")
	private String password;
	@Column(name = "rDate")
	private Date rDate;
	@Column(name = "state")
	private byte state;
	@ManyToOne
	@JoinColumn(name = "roles_id")
	private Roles roles;
	@OneToOne(mappedBy = "users",cascade=CascadeType.ALL)
	private BBSUsers bbsUsers;
妞_ 2013-06-25
  • 打赏
  • 举报
回复
分都给我吧!100啊!
妞_ 2013-06-25
  • 打赏
  • 举报
回复
我看了下你的异常,你用了hibernate,异常很明确啊,org.hibernate.LazyInitializationException,lazy初始化异常,意思就是你可能用了user下级的数据,但是你在查user完毕之后就把session给关了,所以找不到,要不你就把lazy设为false,要不就在web.xml里配置延迟加载,代码如下: <!-- 延迟加载 --> <filter> <filter-name>OpenSessionInViewFilter</filter-name> <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> </filter> <filter-mapping> <filter-name>OpenSessionInViewFilter</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> <filter-mapping> <filter-name>OpenSessionInViewFilter</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping> 配置了延迟加载貌似就不会出现这样的问题,大概异常的思路是这些地方,楼主!自己在具体的看看!
妞_ 2013-06-25
  • 打赏
  • 举报
回复
你为什么不直接去集合数据呢?然后在前台遍历!

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧