我尝试使用此代码获取记录
session.beginTransaction();
/* create criteria */
Criteria cr = session.createCriteria(User.class);
/* set pagination */
cr.setFirstResult((start - 1) * limit);
cr.setMaxResults(start);
/* set sort order */
if(sortField!= null) {
if(order != null && order.equalsIgnoreCase("asc")) {
cr.addOrder(Order.asc(sortField));
} else if(order != null && order.equalsIgnoreCase("desc")) {
cr.addOrder(Order.desc(sortField));
}
}
userList = cr.list();
session.flush();
session.getTransaction().commit();
但由于延迟加载,我得到以下错误。
org.codehaus.jackson.map.JsonMappingException: failed to lazily initialize a collection of role: models.User.accesstokens, could not initialize proxy - no Session (through reference chain: java.util.ArrayList[0]->
at org.codehaus.jackson.map.JsonMappingException.wrapWithPath(JsonMappingException.java:215)
at org.codehaus.jackson.map.JsonMappingException.wrapWithPath(JsonMappingException.java:180)
at org.codehaus.jackson.map.ser.SerializerBase.wrapAndThrow(SerializerBase.java:128)
at org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:253)
at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:212)
答案 0 :(得分:1)
您收到此错误是因为序列化发生在持久性上下文之外。在User实体上执行select时,查询不会检索字段(或关联实体)accesstoken。相反,该字段将替换为代理,该代理将在访问属性accesstoken时用于从数据库中检索数据。如果在提交事务之前访问accesstokens属性,则不会有任何问题,因为会话仍处于活动状态。但是,在您的情况下,当序列化User对象时,会话不活动。
一种可能的解决方案是在序列化发生之前加载所需的数据。