【问题标题】:Getting hibernate information about entites at runtime在运行时获取有关实体的休眠信息
【发布时间】:2011-04-06 10:34:33
【问题描述】:

我正在寻找一种在运行时获取有关我的休眠实体类的信息的方法。详细来说,我需要像

这样的信息

ABC 类具有属性 a、b 和 c,其中 c 是 a 列表和关联到类 XYZ

为了班级

public class ABC {
    private int a;
    private String b;

    @OneToMany
    Private List<XYZ> c;
}

运行时所需的一切。我确信 Hibernate 在运行时知道所有这些,但我不知道如何获取这些信息。

【问题讨论】:

  • 感谢您的提示,这就是我想要的!

标签: java hibernate jakarta-ee


【解决方案1】:
PersistentClass userMapping = cfg.getClassMapping(ABC.class);

cfg 是 Hibernate Configuration 的一个实例。

PersistentClass 拥有您需要的所有信息。

【讨论】:

    【解决方案2】:

    如果您使用 Hibernate 作为 JPA 2 提供程序,那么您可以使用 JPA 2 元模型(javax.persistence.metamodel)。这将为您提供 JPA 元数据中有关 JPA 实体的信息:

    entityManager.getMetamodel().entity(entityClass). getAttributes();
    

    【讨论】:

      【解决方案3】:

      看起来反射是你所追求的,它不是你似乎在追求的休眠特定信息。您只需要有关该类具有哪些字段以及它们是什么类型的信息...

      【讨论】:

      • 通过反射,您需要注意一些 ORM 解决方案使用字节码操作来添加字段,以促进诸如更改跟踪和延迟加载之类的事情。仅通过反思,您可能会发现更多您正在寻找的东西。这是 JPA 2 规范引入元模型的原因之一:stackoverflow.com/questions/5564955/…
      【解决方案4】:

      您可以使用反射获取此信息。

      Class abcClass= ABC.class;
      Field[] fields = abcClass.getDeclaredFields();
      

      【讨论】:

      • 是的,但只是部分。由于类型擦除,特别是关于关联中泛型类型的信息被隐藏了。
      猜你喜欢
      • 1970-01-01
      • 2016-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多