懒得初始化角色集合:

时间:2014-08-20 14:21:58

标签: java hibernate jackson

我尝试使用此代码获取记录

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)

1 个答案:

答案 0 :(得分:1)

您收到此错误是因为序列化发生在持久性上下文之外。在User实体上执行select时,查询不会检索字段(或关联实体)accesstoken。相反,该字段将替换为代理,该代理将在访问属性accesstoken时用于从数据库中检索数据。如果在提交事务之前访问accesstokens属性,则不会有任何问题,因为会话仍处于活动状态。但是,在您的情况下,当序列化User对象时,会话不活动。

一种可能的解决方案是在序列化发生之前加载所需的数据。

相关问题