如何从持久性单元获取所有@Entity类?

汤姆·特雷桑斯基(Tom Tresansky):

问题

我正在编写一个独立的实用程序,给定一个装有JPA-2注释的持久性单元的jar,它需要以编程方式获取特定持久性单元中所有@Entity类的列表。

我想决定使用两种方法中的哪一种来获取此信息,以及为什么;还是还有我没想到的更好的方法。

解决方案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中的目录和文件中的persistence.xml文件,然后查找具有指定持久性单元名称的目录。然后,使用XPath文件获取<class>XML元素列表,并从那里读取完全限定的类名。从名称中构建类标记。

约束/问题

  • 如果可能,我想采用方法1。
  • 该实用程序不会在容器内运行,但是jar是一个旨在在容器内运行的EJB项目。怎么会有问题呢?
  • 该实用程序将在类路径上提供Open-EJB,以获取所有Java EE 6类的实现。
  • 即使EJB项目是为在Hibernate上运行而构建的,该实用程序也不应特定于Hibernate。
  • 有绊脚石吗?
亚历山大·米滕科(Alexander Mitenko):

如果您的jar格式正确(persistence.xml位于正确的位置-在META-INF文件夹中),那么一切看起来都很好。

不必在容器内运行实用程序,JPA并不是JavaEE规范的一部分。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从持久性单元获取所有托管类型的列表

使用带有持久性单元的反射来搜索Java类

JPA 2应用程序中如何有多个持久性单元?

具有各种JPA版本的复合持久性单元

从具有相同持久性单元的多个Db读取?

Wildfly中有多个持久性单元?

如何为单个或所有用户设置持久性$ PATH变量

如何使用Akka持久性查询检索所有日记帐事件?

如何在持久性中列出所有数据

房间持久性库。删除所有

Haskell持久性库中预期有“ Key”时,如何通过“ Int”获取实体?

aiohttp如何在类中保存持久性ClientSession?

在Fluent NHibernet中获取“没有持久性”错误

持久性单元错误:javax.persistence.PersistenceException:没有名为EntityManager的持久性提供程序

“找不到持久性单元”错误

动态更改持久性单元-JPA

班级问题的持久性单元

从持久性类创建JPQLQuery

通过持久性单元以编程方式包括实体类吗?

持久性单元错误更多2个EntityManagers 1个持久性单元?

没有XA的事务中是否可以有两个MSSQL持久性单元?

从@EmbeddedId类提取超类时,实体没有持久性ID属性

没有@Id的休眠/持久性

NHibernate:CastProjection没有持久性

Spring JPA Config IllegalArgumentException:未找到具有名称的持久性单元

带有Hibernate的Karaf无法启动我的持久性单元

多个持久性单元抛出错误,未找到持久性错误,Spring + JPA

GetFirst和GetNext调用以从持久性类中获取记录

BATS:使变量在所有测试中均具有持久性