8

我想知道是否有一种方法可以获取 JPA 中特定持久单元的所有实体类及其元数据。

我所说的元数据不仅是指字段,还包括它们的列名、长度、精度、数据类型,还有表名和我能得到的任何东西。我尝试使用元模型,但我认为这仅适用于 JPQL 查询。

我需要能够向用户显示某个 PU 的所有活动实体,并且我不想将它们硬编码到某个数组或数据库中,我希望 API 告诉我它有哪些实体。而且,如果可能的话,获取每个实体的托管实例。

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

我更喜欢 JPA 兼容的解决方案,但如果不可能,Hibernate 或 EclipseLink 特定的答案可以做到。

谢谢!

4

2 回答 2

11

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

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

于 2012-08-14T10:49:47.290 回答
2

实体在定义时独立于任何持久性单元。它们在persistence.xml 的定义中与持久性单元相关联。为给定持久单元管理实体管理器的 EntityManagerFactory 似乎没有任何 API 来获取它管理的实体列表。Hibernate 的 SessionFactory,EntityManagerFactory 的对应物,确实具有获取类元数据的 API(http://docs.jboss.org/hibernate/core/3.5/api/org/hibernate/SessionFactory.html)。

于 2012-08-14T03:36:48.330 回答