【发布时间】:2011-05-13 22:34:30
【问题描述】:
我正在开发一个使用 JPA2 处理一些数据库实体的工具,并使用 hibernate 作为持久性提供程序。该工具是通用的并且与任何业务逻辑分离,它需要一个通用的Class<? extends Task> 参数来执行它的业务,其中 Task 是我创建的一个接口,它表示实现实体具有我的工具感兴趣的一些行为。该工具的工作包括从数据库中获取给定类的实例并操作它们的一些属性。它是一个通用工具,因为它正在被开发为可重用,并且我们拥有大量实体类(但不是所有实体类)来实现该接口(主要是那些对某些类型的正在运行的业务任务进行建模的实体)。
要完成该工具的工作,我需要为给定的类获取EntityManager。要获得EntityManager,我需要EntityManagerFactory。要获得EntityManagerFactory,我需要持久化单元名称。
所以,我的问题是,给定一个实体类,获取其持久性单元的名称。但是,如果没有用于该持久性单元的现有 EntityManager,我没有找到任何方法来执行此操作,这会产生先有鸡还是先有蛋、钥匙锁定在胸内的问题。
部分解决方案是将持久性单元的名称与实体类一起传递,但这看起来是错误的,因为应该从给定的类中推断(或至少猜测)持久性单元的名称。这可以优化为将名称放在实体类的注释中,但这看起来仍然是一个不合适的解决方案。搜索和分析persistence.xml 文件是我们真正想要避免的事情。
那么,我能做些什么来解决这个问题?有什么想法吗?
【问题讨论】:
-
你有没有找到任何其他替代这里发布的那些?我也有同样的困境。
-
@davidmontoyago:我根据 Robin 的回答完成了使用。