如何从持久性单元获取所有@Entity类?问题限制/关注
2022-09-04 03:03:08
问题
我正在编写一个独立的实用程序,给定一个包含JPA-2注释的持久性单元的jar,它需要以编程方式获取特定持久性单元中所有@Entity类的列表。
我想决定2种方法中的哪一种是获取此信息的方法,以及为什么;或者如果有另一种我没有想到的更好的方法。
解决方案 1
Java程序将jar放在类路径上,使用JavaSE方法从jar中的类创建持久性单元。然后它使用javax.persistence类来获取JPA元模型,从中拉回类标记列表。
EntityManagerFactory emf = Persistence.createEntityManagerFactory("MY_ PERSISTENCE_UNIT");
Metamodel mm = emf.getMetamodel();
// loop these, using getJavaType() from Type sub-interface to get
// Class tokens for managed classes.
mm.getManagedTypes();
解决方案 2
程序扫描指定 jar 内的目录和文件以查找持久性.xml文件,然后找到具有指定持久性单元名称的目录和文件。然后 XPath 该文件以获取 XML 元素的列表,并从那里读取完全限定的类名。从名称中生成类标记。<class>
限制/关注
- 如果可能的话,我想采用方法1。
- 此实用程序不会在容器内运行,但 jar 是一个设计用于在容器内运行的 EJB 项目。这将如何成为一个问题?
- 该实用程序将在类路径上提供 Open-EJB,以获取所有 Java EE 6 类的实现。
- 即使 EJB 项目是为在 Hibernate 上运行而构建的,该实用程序也不应该是特定于 Hibernate 的。
- 有什么绊脚石吗?