java如何从持久化单元中获取所有@Entity类?
问题
我正在编写一个独立的实用程序,给定一个包含JPA-2注释的持久化单元的jar,它需要以编程方式获取特定持久化单元中所有@Entity类的列表
我想决定两种方法中的哪一种是获取这些信息的方法,以及为什么;或者如果还有更好的方法我没想到
解决方案1
Java程序将jar放在类路径上,使用JavaSE方法从jar中的类创建持久化单元。然后它使用javax。持久性类要获得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文件获取<class>
XML元素的列表,并从中读取完全限定的类名。根据名称,构建类标记
限制/担忧
- 如果可能的话,我想采用方法1李>
- 该实用程序不会在容器内运行,但jar是一个EJB项目,旨在在容器内运行。这怎么会是个问题李>
- 该实用工具将在类路径上提供开放EJB,以获得所有JavaEE6类的实现李>
- 即使EJB项目构建为在Hibernate上运行,该实用程序也不应该是特定于Hibernate的李>
- 有什么绊脚石吗李>
# 1 楼答案
如果有人感兴趣,解决方案1起作用了。以下是我必须要做的:
关键是重写我的事务类型,并清空在持久性中定义的jtaDataSource。xml。结果发现其他一切都是多余的