我想知道是否有办法在JPA中获取特定持久单元的所有实体类及其元数据。
通过元数据,我不仅指字段,还指它们的列名,长度,精度,数据类型,以及表名和我可以获得的任何内容。我尝试使用元模型,但我认为仅限于JPQL查询。
我需要能够向用户显示某些PU的所有活动实体,并且我不想在某些数组或数据库中对它们进行硬编码,我希望API告诉我实体所具有的功能。而且,如果可能,请为每个实体获取托管实例。
我想我可以尝试使用反射来获取带有@Entity注释的所有类,但它不会很漂亮,并且知道哪个属于特定PU会更难,所以如果api已经暴露了这个信息这会很棒。
我更喜欢符合JPA的解决方案,但如果不可能,Hibernate或EclipseLink特定的答案就可以做到。
谢谢!
答案 0 :(得分:8)
是的,您可以从EntityManager
获取有关enitities的所有实体和相应的元数据信息。
EntityManager.getMetamodel()
将允许您访问Metamodel
界面,您可以从中访问EntityType
和ManagedType
以获取实体的属性。
答案 1 :(得分:2)
实体在定义时独立于任何持久性单元。它们在persistence.xml中与定义中的持久性单元相关联。管理给定持久单元的实体管理器的EntityManagerFactory似乎没有任何API来获取它管理的实体列表。 Hibernate的SessionFactory,与EntityManagerFactory的对应,确实有API来获取类元数据(http://docs.jboss.org/hibernate/core/3.5/api/org/hibernate/SessionFactory.html)。