Java 仅在需要时加载惰性对象

Java 仅在需要时加载惰性对象,java,hibernate,hibernate-mapping,Java,Hibernate,Hibernate Mapping,我正在使用hibernate 4.3 我有一个父表它包含从地址表引用的外键。地址在父表中有@manytone(fetch=FetchType.LAZY)。现在我想要的是 案例1)当类型为parent的用户登录时,我需要从父表获取数据,但在这种情况下不想加载地址 案例2)当家长去编辑他/她的个人信息时,我需要加载家长以及地址 我试过使用休闲代码 Servlet GsonBuilder builder = new GsonBuilder(); builder.registerType

我正在使用hibernate 4.3 我有一个父表它包含从地址表引用的外键。地址在父表中有@manytone(fetch=FetchType.LAZY)。现在我想要的是

案例1)当类型为parent的用户登录时,我需要从父表获取数据,但在这种情况下不想加载地址

案例2)当家长去编辑他/她的个人信息时,我需要加载家长以及地址

我试过使用休闲代码

Servlet

    GsonBuilder builder = new GsonBuilder();
    builder.registerTypeAdapterFactory(HibernateProxyTypeAdapter.FACTORY);
    Gson gson = new Gson();
    int parentID = Integer.parseInt(request.getParameter("parentID"));
    return gson.toJson(api.getParentDetails(parentID));
getParentDetails()方法

public HashMap getParentDetails(int parentID) throws Exception {
        Parent parentDetails;
        responseHashMap = Util.getInitialHashMap();
        try {
            session.getTransaction().begin();
            Query q = session.createQuery("from Parent as p where p.parentId=:parentID");
            q.setParameter("parentID", parentID);
            parentDetails = (Parent) q.uniqueResult();
            //Hibernate.initialize(parentDetails.getAddress());

            responseHashMap.put("responseData", parentDetails);
            responseHashMap.put("responseCount", 0);
            if (parentDetails != null) {
                responseHashMap.put("errorCode", 107);
            } else {
                responseHashMap.put("errorCode", 0);
            }
            session.getTransaction().commit();
        } catch (Exception e) {
            session.getTransaction().rollback();
            throw e;
        }
        return responseHashMap;

    }
现在您可以看到注释行了

//Hibernate.initialize(parentDetails.getAddress())

当我取消注释这一行时,我的代码工作正常,但在情况1中失败,对我来说,它为我加载了不必要的数据,作为我在这种情况下不想要的父级地址

当我评论这句话时

//Hibernate.initialize(parentDetails.getAddress())

我犯了一个错误

org.hibernate.LazyInitializationException:无法初始化代理-无会话

我知道发生上述错误是因为hibernate处理惰性对象,但它的会话在那里不活动


那么我如何在我的应用程序中实现案例1(见上文)

将用户传递给方法,以便您可以检查其属性并在需要时调用initialize?@Gimby如何详细解释将用户传递给方法,以便您可以检查其属性并在需要时调用initialize?@Gimby如何详细解释