【问题标题】:failed to lazily initialize a collection of role in rest webservice未能在 REST Web 服务中懒惰地初始化角色集合
【发布时间】:2014-02-17 17:23:22
【问题描述】:

我试过这段代码

  @GET
@Produces("application/xml")
public Customer getMsg() {
    Customer cus =  em.find(Customer.class,1);
    return cus;
}

客户类与地址实体有一对多的关系。 但是当我试图从我的 ajax 客户端调用 ws 时,它会给我这个错误吗?如何解决这个问题。 应用程序在 jboss-eap-6.2 上运行,并且该类是无状态 bean。

JBWEB000065: HTTP Status 500 - org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: org.test.Customer.addresslist, could not initialize proxy - no Session

【问题讨论】:

    标签: rest jpa ejb


    【解决方案1】:

    您可以将 fetchType 更改为 EAGER,或者您需要在实体仍处于附加状态时检索地址,这意味着您需要在返回之前以您拥有的方法检索它。如果您使用的是 JPA 2.1,那么您可能可以使用实体图

    【讨论】:

    • 当我使用急切的方法时,它会给我 javax.xml.bind.MarshalException - 带有链接异常。我不需要客户的地址。只有我想检索客户实体。
    【解决方案2】:

    考虑在地址字段中应用 @XmlTransient,你得到的错误是因为实体的状态没有被管理,因为你在事务之外,因为当 Marshall 使用访问器时你的属性是 LAZY方法,它会尝试加载地址,并且由于您在事务之外发生错误,因此请考虑使用 @XmlTransient 来避免 marshall 尝试使用地址。

    public class Customer
    
     @XmlTransient
     public Address addresslist
    

    应用它您正在使用 Jaxb,如果不考虑搜索类似内容以避免编组实体中的某些字段。

    【讨论】:

      猜你喜欢
      • 2011-07-21
      • 1970-01-01
      • 2014-09-25
      • 1970-01-01
      • 2019-01-24
      • 2017-03-11
      相关资源
      最近更新 更多