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

为什么在我的多通关联中看不到hibernate代理对象?

农星华
2023-03-14

根据hibernate文档,默认情况下,我的@manytone关系应该有代理对象。然而,当我在Eclipse debugger(“Variables”视图)中查看扩展对象时,字段变量似乎是entity类中定义的基类型的实例。此外,当我调用会话时。使用Hibernate模式获取(输入,id)。show_sql=true我可以看到对象上定义的所有@ManyToOne关系的左外部联接。

Hibernate是否需要为这些关系创建代理类/对象?也许字节码增强?

引自hibernate文档:

集合的延迟抓取是使用Hibernate自己的持久集合实现实现的。然而,对于单端关联中的懒惰行为,需要一种不同的机制。必须代理关联的目标实体。Hibernate使用运行时字节码增强功能(可通过字节码提供程序访问)为持久性对象实现延迟初始化代理。

在启动时,Hibernate默认为所有持久类生成代理,并使用它们来实现多对一和一对一关联的延迟获取。


共有1个答案

阙辰龙
2023-03-14

默认情况下,所有@ManyToOne@OneToOne关联都是EAGER,这就是为什么在获取根实体时它们会加入。

仅当关联未初始化时才使用代理。要使关联变得懒惰,只需添加LAZY fetch属性:

@ManyToOne(fetch = FetchType.LAZY)
 类似资料:
  • 我有两个表,ComputerNode和Connection。ComputerNode有一个主键< code>nodeid,但连接没有主键。我无法修改表模式。如果它们有一对多的关系,我应该如何创建java POJO?基本上我的目标是做一个像这样的内部连接: 下面是 SQL 表架构。计算机节点表: 连接表: 表之间的关系是一对多的。一个计算机节点可以有多个连接 我已经创建了两个Java的POJO类,但

  • 问题内容: 在本文档中(向下滚动至“单向”部分): http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity- mapping-association- collections 它说,与联接表进行单向一对多关联比仅在拥有实体中使用外键列更可取。我的问题是,为什么它更受欢迎? 问题答案: 考

  • 以前它工作正常,但现在一切都很慢,而且我没有看到TextField,在层次结构中选择游戏对象时,在编辑器窗口中显示它需要将近5秒的时间。 在此之前,一切都很快,并在编辑器窗口中显示整个层次结构。 现在它是空的: 我从这个问题中得到了答案: 可通过计算机搜索的

  • 1. 前言 本节课,咱们一起继续聊聊多对多关联映射。通过本节课程,你将了解到: 多对多关联映射的实现; 双向多对多关联映射的实现。 2. 多对多关联映射 首先了解表中的多对多关系,学生表中的数据和课程表中的数据就存在多对多关系。 一名学生可以选修多门课程,一门课程可以供多名学生选修。 数据库通过主外键的机制描述表中的数据之间的关系。对于存在多对多关系的数据表,借助于中间表,分拆成两个一对多(或者多

  • 问题内容: 我可以从Google那里收集到的是: Hibernate使用代理对象来实现延迟加载。当我们请求从数据库中加载对象,并且获取的对象具有对另一个具体对象的引用时,Hibernate返回一个代理而不是具体的关联对象。 Hibernate使用字节码检测(由Javassist提供)创建代理对象。Hibernate在运行时使用代码生成库创建我们的实体类的子类,并将实际对象替换为新创建的代理。 那么

  • 我能从谷歌得到的信息是: > Hibernate使用代理对象实现延迟加载。当我们请求从数据库加载对象,并且获取的对象引用了另一个具体对象时,Hibernate会返回一个代理,而不是具体的关联对象。 Hibernate使用字节码检测(由javhelp提供)创建代理对象。Hibernate在运行时使用代码生成库创建我们实体类的子类,并用新创建的代理替换实际对象。 那么,代理对象到底包含什么? 它是否包