我有一个使用 Hibernate 和 Tomcat 提供的 JPA 的 webapp。我没有 DI 框架,没有 Spring,没有 Guice,没有完整的 Java EE 应用服务器。
我需要 JPA 连接到两个不同的数据库。我像这样连接到第一个数据库:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("mydb");
[...]
EntityManager em = emf.createEntityManager();
我在 persistence.xml 中声明了“mydb”持久性单元,并通过 JNDI 链接到它在 context.xml 中声明的资源。直到这里一切正常。
现在我需要连接到另一个数据库。我已将其添加到 persistence.xml 和 context.xml,并将持久性单元命名为“mydb2”。现在我假设我可以像这样使用它:
EntityManagerFactory emf2 = Persistence.createEntityManagerFactory("mydb2");
EntityManager em2 = emf2.createEntityManager();
Hibernate 配置为验证两个数据库上的类和表
<property name="hibernate.archive.autodetection" value="class, hbm"/>
<property name="hibernate.hbm2ddl.auto" value="validate"/>
在persistence.xml 中。但是,当我运行/调试 webapp 时,Hibernate 尝试验证 mydb 上属于 mydb2 的 @Entity 类,但显然失败了。现在有趣的是,如果我将 Hibernate 验证属性设置为“无”,我的应用程序确实可以正常工作并根据需要连接到正确的数据库......
有没有办法让 Hibernate 只验证属于它们各自数据库的类/表?
编辑:虽然可以在 @Table 注释中指定目录名称,但在我的情况下,这不是一个好的解决方案,因为我在生产中有多个此 webapp 的实例,并且每个实例都连接到一对不同的数据库。在投入生产之前被迫接触源代码是不好的。