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

Hibernate惰性加载对象的getDeclaredFields()不返回字段

晋越彬
2023-03-14
final Field field = clazz.getDeclaredField(fieldName);
field.setAccessible(true);
Object obj = field.get(instance);
obj.getClass().getDeclaredFields()

共有1个答案

叶书
2023-03-14

问题只是反射和Hibernate不工作在简单的步骤。

代码中的实例对象是由hibernate提取的对象(惰性加载)。该对象返回的不是真正的java对象,而是hibernate代理对象。在代理对象上调用反射会给出完全出乎意料的结果。

在注释中,https://stackoverflow.com/users/424903/gimby指出了一个解决方案,可以用来取消对hibernate惰性加载对象的代理。Hibernate代理到真实对象的转换

 类似资料:
  • 问题内容: 我记得在JPA或hibernate中有一个注释,告诉hibernate使用getId / setId方法而不是property(我们注释属性)。如果没有此设置,则getId会导致命中数据库并填充该对象的所有字段,这不是我想要的。有人知道该注释是什么吗? 例: 因此,当id已在hibernate项目代理对象中时,ticket.getProject.getId()导致命中数据库以获取项目。

  • 我们目前有几个@OneToOne关系,由于已知的惰性加载的限制,它们总是会急切地从反方向获取。 为了启用逆关系的延迟加载,我正在尝试启用构建时字节码检测。 到目前为止我所做的... 这些关系现在不再急切地加载...但是它们也不会延迟加载,它们只是静默地返回null。 我尝试从实体中删除接口和字段,因为我不确定是否需要这样做,在此之后,我在启动时不再获得消息,并且默认情况下返回到急切加载。 我是不是

  • 默认情况下,Hibernate支持一对多/多对一和多对多关联的惰性加载。但Hibernate不支持一对一关系的延迟加载。让我们为父场景和子场景提供以下示例。 一个人有一个地址父实体定义为。 子实体定义为 在上面的场景中,它应该是惰性加载,但实际上hibernate正在产生急切的加载。两个select语句同时激发1)select用于父实体,在本例中为Person;2)select用于子实体,在本例中

  • 我有一个由Hibernate加载的ORM实体,当我需要时,会加载某些关联。该实体通过MQ传输到客户机应用程序(客户机是.NET,所以我使用MessagePack来序列化/反序列化),当实体被MsgPack序列化时,它试图访问惰性加载的关联,但失败了,因为会话已经关闭。即使它没有失败,我也不希望它在某些情况下加载关联。 是否有一种方法告诉hibernate使用空值而不是某些查询结果的代理来填充惰性关

  • 我的理解是,默认情况下,Hibernate将所有关系类型的FetchType设置为lazy。 在我的例子中,我有一个双向的OneToMany-ManyToOne关系,如下所示: 另一个问题是我如何得到一个有特定名字的孩子?是否可以通过存储库进行操作?还是需要getChildren(parentId)并迭代直到找到以特定方式命名的那个? 编辑:在一些建议之后,我继续这样实现了我的ChildRepos

  • 我有一个Java类来表示数据库中的一个条目。所以每个字段都是数据库中的一列。 当我想更新该数据库时,我会构造一个ContentValures对象。 是 速度快于 的绝对性能是什么?我希望有人能真正指出是如何工作的。我知道容器的大小调整是如何工作的,但我对如何工作以及如何执行一无所知。