Project $$ EnhancerByCGLIB $$ 67a694bd出现在Hibernate中

bun*_*112 7 java orm hibernate foreign-key-relationship

我有一个文档实体多对一地映射到项目实体.

当我调用document.getProject,在调试器中,在文档对象的项目字段中,我看到了一些东西Project$$EnhancerByCGLIB$$67a694bd.

如何检索实际项目对象?

Jon*_*han 11

您所看到的是Hibernate-Proxy-Object,它使hibernate能够进行惰性实例化.

首先要问自己的是,你是否真的想要访问原始对象.通常你最好假装代理是你的实际对象,让hibernate做所有的魔术.

如果由于某种原因你真的需要对象本身(例如,如果你需要确切的类型),下面的代码应该工作:

if (object instanceof HibernateProxy) {
   return ((HibernateProxy) object).getHibernateLazyInitializer().getImplementation();
}
Run Code Online (Sandbox Code Playgroud)

您应该知道,上面编写的代码的结果将为您提供一个不再受休眠控制的分离对象,因此对象的更改将不会与数据库同步!

  • 一旦通过访问器方法访问该字段,代理将从数据库加载实际数据。所以基本上有两种方法。在代码中调用o.getField()(然后您可以在调试器窗口中看到实际值)或将o.getField()添加到watchedExpressions窗口。两种方式都应该为您提供实际数据。 (2认同)