【问题标题】:org.hibernate.LazyInitializationException - While accessing model by a web service (Jax-ws)org.hibernate.LazyInitializationException - 通过 Web 服务 (Jax-ws) 访问模型时
【发布时间】:2014-01-07 12:37:28
【问题描述】:

首先,我已经在许多问题和线程中寻找解决方案,但没有人能够回答它来解决它,这就是我问它的原因。

问题是,我有一个模型有 2 个 List,它们被声明为已加载 Lazy,因为它们很重,我不希望每次加载 product 时都加载它们。例如,在下面的代码中,两个映射列表都是延迟加载的。

class Product{
     Integer id;
     List<CategoryMapping> categoryMappings;
     List<BrandMapping> brandMappings;
}

假设我在 web 服务中有一个名为 getAllProducts() 的方法,其唯一职责是返回一个 List&lt;Product&gt; 而没有任何进一步的依赖;

我使用 Hibernate 完美地获取了一个列表,但是在将列表返回给客户端时,会弹出此错误:

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: myproj.model.catalog.Product.brandMappings, could not initialize proxy - no Session

有什么方法可以让 webservice 方法忽略延迟加载方法并让列表返回给客户端。

是的,请注意,我正在使用 Sping、Hibernate 和 glassfish(所有这些的最新稳定版本)并且所有类都是注释驱动的

【问题讨论】:

    标签: hibernate jax-ws


    【解决方案1】:

    创建另一个没有列表的类并在服务上公开这个类。

    【讨论】:

    • 你的意思是我应该在发送给客户端之前加载列表中的数据?
    • 但是假设我有 5000 个产品,那么我需要在 5000 个产品中分别调用这两个列表,最终不会被使用。有没有什么办法可以将空白列表发送到客户端或网络服务只是忽略这些列表。
    • 这是唯一的方法吗?似乎没有多少人面临这个hibernate没有为它做任何事情的问题。
    • 如果你发送一个空列表,客户端会认为收到的产品没有categoryMappings。因此,您不想发送空列表,但根本不发送列表。这不是 Hibernate 问题,而是 API 设计问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    相关资源
    最近更新 更多