当前位置: 首页 > 知识库问答 >
问题:

Hibernate嵌套延迟加载和LazyLaunalizationException

濮阳钟展
2023-03-14

我有一个模型如下的项目(伪代码):

class Transaction{

      @OneToMany(mappedBy="transaction", fetch = FetchType.LAZY)
      private Set<TransactionVersion> transactionVersions;
}

class TransactionVersion{

      @ManyToOne(fetch = FetchType.EAGER)
      @JoinColumn(name="ID_TRANSACTION_VERSION")
      private Transaction transaction;

      @ManyToOne(fetch = FetchType.EAGER)
      @JoinColumn(name="ID_CLIENT_VERSION")
      private ClientVersion clientVersion;
  }

  class ClientVersion{

      @OneToMany(mappedBy="clientVersion",fetch=FetchType.Lazy)
      private Set<TransactionVersion> transactionVersions;

      @OneToMany(mappedBy="client", fetch=FetchType.LAZY)
      private Set<Client> clients;
  }

现在,如果我尝试获取类似的内容(get(0)只是一个示例):

  transaction.getTransactionVersions().get(0)
 .getClientVersion().getClients()

我get LazyInitializationException未能延迟初始化角色的集合:ClientVersion。客户端,没有会话或会话已关闭

若我更改ClientVersion和客户端之间的关系上的FetchType以使其工作正常,但我当然更希望延迟加载它。

我知道如果我有权访问hibernate会话,我可以手动初始化集合,但有没有办法映射它,以便hibernate可以自己完成?当我想获取一些相关对象时,我不想使用自定义方法。

共有1个答案

谭云瀚
2023-03-14

使用FetchType。懒惰按需加载数据。但如果您超出会话的范围,则无法加载它们,因为会话已关闭。

使用FetchType。EAGER您在数据库中执行连接时一次性加载所有数据,因此您没有异常,因为当您超出会话范围时,数据已经加载,您不需要从数据库中提取它们

 类似资料:
  • 问题内容: 我正在使用Spring + Hibernate。我所有的HibernateDAO都直接使用sessionFactory。 我有应用程序层->服务层-> DAO层,所有集合都被缓慢加载。 因此,问题在于,有时在应用程序层(包含GUI / swing)中,我会使用服务层方法(包含@Transactional批注)加载实体,并且我想使用此对象的惰性属性,但忽略了会话已经关闭。 解决此问题的最

  • 问题内容: 我正在使用Hibernate的延迟加载,并且即使在web.xml中定义了一个使用OpenSessionInViewFilter的过滤器后,也正在获取sessionFactory缺少的异常 我的servlet-context.xml具有以下会话和事务管理器定义: 我仍然收到以下异常: 我尝试定义一个sessionFactoryBeanName属性,但结果没有改变。我究竟做错了什么? 问题

  • 问题内容: 这就是我想要做的。 创建具有与孩子的OneToOne关系的父母 父母必须使用延迟加载来获取孩子 如果父母被删除,孩子也被删除 如果孩子被移走,父母不应该受到影响 级联更新和删除必须转换为DDL 班级家长 班级儿童 我的第1、3、4 点 完全正常工作,而 第5点则 部分正常工作,仍然需要解决如何翻译更新部分indo DDL。 第2点 是这里的大问题,对于我目前的解决方案,父级不会延迟加载

  • 描述 (Description) 延迟加载可应用于图像,背景图像和淡入效果,如下所述 - 对于图像 要在图像上使用延迟加载,请按照给定的步骤进行操作 - 使用data-src属性而不是src属性来指定图像源。 将类lazy添加到图像。 <div class = "page-content"> ... <img data-src = "image_path.jpg" class = "l

  • 问题内容: 我以这样一种方式进行了JPA设置:如果我不使用延迟加载,则几乎将加载整个数据库。我也直接在模型上使用序列化,因此有时我需要初始化代理。 我只想在集合上使用延迟加载。急切地获取一些奇异实体的事实就很好了。但是,无论我如何尝试设置集合,我都永远不会得到代理集合,而我总是会得到完全加载的集合。 这是一些示例代码: 所以这里的问题是,当我检查调试器时,答复的persistantBag-list

  • 我需要从Rest控件获取一个实体及其集合,但我对spring data JPA有一个非常奇怪的行为。 我对带有懒惰加载的实体有一种莫名其妙的关系。