Javascript Spring MVC将带有延迟加载字段的hibernate对象返回给AjaxResponseBuilder

Javascript Spring MVC将带有延迟加载字段的hibernate对象返回给AjaxResponseBuilder,javascript,ajax,hibernate,spring-mvc,lazy-loading,Javascript,Ajax,Hibernate,Spring Mvc,Lazy Loading,假设我有一个Person对象: String name = "bob"; Int number = 3; String lastName = ? lastName字段是用Hibernate延迟加载的。当我想 AjaxResponseBuilder builder = AjaxResponseBuilder.success(); builder.addData("person", Person"); 我得到一个HibernateLazyLoad异常,因为尚未获取lastName。有

假设我有一个Person对象:

 String name = "bob";
 Int number = 3;
 String lastName = ? 
lastName字段是用Hibernate延迟加载的。当我想

 AjaxResponseBuilder builder = AjaxResponseBuilder.success();
 builder.addData("person", Person");

我得到一个HibernateLazyLoad异常,因为尚未获取lastName。有没有一种方法可以无例外地传递对象的其余部分?到目前为止,我只需将lastName设置为null并传递对象即可,但这似乎是一种解决方法,而不是一种解决方案。

似乎AjaxResponseBuilder想要访问Person对象的lastName字段(可能它只是覆盖了所有字段)。您有以下选择:

  • 不要将字段设置为惰性:将lazy=“false”添加到.hbm(或相应的注释)

  • 在将person对象传递给生成器之前,初始化该对象上的字段:

    Hibernate.initialize(person);
    
  • 在web.xml中添加OpenSessionInViewFilter(如上所述):

    
    openSessionInViewFilter
    org.springframework.orm.hibernate4.support.OpenSessionInViewFilter
    openSessionInViewFilter
    /*
    

  • 如果AjaxResponseBuilder有某种配置告诉它从查找中忽略lastName字段,那么这也应该起作用。

    什么是AjaxResponseBuilder?@bhantol它是一个Spring,用于在Java中构建对Ajax请求的响应会话已经关闭。您可能需要配置
    OpenSessionInViewFilter
    ,使会话对当前线程保持打开状态。@Bart如果我不需要lazyload属性怎么办?我只想在没有懒洋洋的场地上通过它?
    <filter>
      <filter-name>openSessionInViewFilter</filter-name>
      <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
    </filter>
    
    <filter-mapping>
      <filter-name>openSessionInViewFilter</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>