在运行时获取有关实体的Hibernate信息

4
我正在寻找一种在运行时获取我的Hibernate实体类信息的方法。具体来说,我需要像下面这样的信息:
Class ABC有属性a、b和c,其中c是一个列表,并且关联到类XYZ。
对于这个类。请注意保留HTML标记。
public class ABC {
    private int a;
    private String b;

    @OneToMany
    Private List<XYZ> c;
}

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


谢谢大家的提示 - 这就是我在寻找的全部! - Erik
4个回答

4

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

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

3
PersistentClass userMapping = cfg.getClassMapping(ABC.class);

cfg是Hibernate Configuration的一个实例。

PersistentClass包含了您需要的所有信息。


0

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

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

是的,但只有部分。特别是关于关联中通用类型的信息由于类型擦除而被隐藏。 - Erik

0

看起来你需要反射,这不是你想要的Hibernate特定信息。你只是想知道类有哪些字段和它们的类型...


关于反射,您需要注意到一些ORM解决方案使用字节码操作来添加字段,以便实现诸如更改跟踪和延迟加载等功能。仅通过反射可能会发现更多您需要的内容。这也是JPA 2规范引入元模型的原因之一:https://dev59.com/4lXTa4cB1Zd3GeqP6fEZ#5567136 - bdoughan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接