检索JPA实体列表和元数据

Fra*_*ana 7 java hibernate jpa eclipselink

我想知道是否有办法在JPA中获取特定持久单元的所有实体类及其元数据.

通过元数据,我不仅指字段,还指它们的列名,长度,精度,数据类型,以及表名和我可以获得的任何内容.我尝试使用元模型,但我认为仅仅针对JPQL查询.

我需要能够向用户显示某些PU的所有活动实体,并且我不想在某些数组或数据库中对它们进行硬编码,我希望API告诉我实体所具有的功能.而且,如果可能,请为每个实体获取托管实例.

我想我可以尝试使用反射来获取带有@Entity注释的所有类,但它不会很漂亮,并且更难知道哪个类属于特定的PU,所以如果api已经暴露了这个信息,那么它将是大.

我更喜欢符合JPA的解决方案,但如果不可能,Hibernate或EclipseLink特定的答案就可以做到.

谢谢!

Mei*_*ppa 8

是的,您可以从中获取有关enitities的所有实体和相应的元数据信息EntityManager.

EntityManager.getMetamodel()将允许您访问Metamodel可以访问的界面EntityTypeManagedType获取实体的属性.

  • Metamodel独立于JPQL并且实际上用于条件查询,但它可用于访问某些信息,例如实体名称和属性 - metamodel.getEntities(),然后是EntityType.getName()和EntityType.getDeclaredAttributes()每个实体.这将是JPA数据 - 表/列信息需要提供者特定的代码.请参阅http://wiki.eclipse.org/EclipseLink/FAQ/JPA#How_to_access_table.2C_column_and_schema_information_at_runtime.3F,了解如何在EclipseLink中完成此操作 (2认同)