java - 反射 - getInterfaces() 显示奇怪的接口(interface)

标签 java hibernate reflection

使用Hibernate ,我得到一个List<BlablaPO> ( BlablaPO 实现 Blabla )。 当我做这样的事情时:

for(Blabla blabla : list) {
    Class<?>[] interfazes = blabla.getClass().getInterfaces();
}

这段代码只是接受Collection<T>的一段代码的一部分。 。今天,我在新的List<Blabla>上再次使用了这段代码。 ,我返回的接口(interface)中没有 Blabla,而是得到 2 个接口(interface):

  • 界面org.hibernate.proxy.HibernateProxy
  • 界面javassist.util.proxy.ProxyObject

我是否错误地加载了集合?我尝试急切地加载该集合。

编辑: 我相当确定问题是因为我延迟加载了我的集合。

最佳答案

发生这种情况是因为 Hibernate 将您的实例替换为代理您自己的类的生成类。例如,像这样的 bean:

class Foo implements SomeInterface {
   @OneToMany
   public List<MyBean> getBar() { ... }
}

将由 Hibernate 进行子类化,类似于以下类:

class Foo$Hibernate extends Foo implements HibernateProxy, ProxyObject {
  @Override
  public String getBar() { Hibernate.loadFromDBOnDemand(); }
}

当你请求Foo$Hibernate的接口(interface)时,您将看不到SomeInterface ,您必须首先导航至 SomeInterface 。病情foo instanceOf SomeInterface但会继续持有,并且可能是您想要的。

关于java - 反射 - getInterfaces() 显示奇怪的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37567572/

相关文章:

java - JSTL 和时区

.net - Type.GetMethods 的 BindingFlags 不包括属性访问器

java - 从另一个包添加实体时为 "QuerySyntaxException: User is not mapped"

java - Hibernate:更新表查询不起作用

java - 将 Hibernate EntityManager 保持在 Runnable 中

c# - 自定义,复杂的动态反射解决方案-C#

c# - 强制 `Expression<Func<TInstance,TProp>>` 有一个 Body 是 `MemberExpression`

java - asyncMode 是什么意思?

java - SQL中是否有类似 'LIKE'语句的java函数?

java - 如何更改 IntelliJ IDEA 中的顶级包名称?