【发布时间】:2022-11-11 23:16:38
【问题描述】:
我制作了一个简单的 SpringBoot REST 应用程序用于测试目的,其中表位于 2 个数据库中,一个是 Mysql,一个是 Postgresql。要配置 2 个连接,我使用了来自 here 的说明,在第 6 点 - “Spring Boot 中的多个数据库”,一切似乎都很好,启动了 2 个连接,但只有主连接有效。
因此,如果 Mysql 连接被注释为 @Primay 只有 Mysql REST 服务工作,在 Postgresql 上,所有表的错误都是“org.hibernate.hql.internal.ast.QuerySyntaxException: <Entity_Name> 未映射“。但是,如果我进行一次更改并在 Postgresql 连接上设置 @Primary,那么所有 Postgres 表都在工作,并且所有 Mysql 表都给出相同的错误(表未映射)。
所以不知何故,我认为正确的连接不是根据包自动选择的。
更新: 我找到另一个教程here 使用不同的数据库类型,我按照说明进行但结果相同,辅助数据库中的所有表都报错“org.hibernate.hql.internal.ast.QuerySyntaxException: <Entity_Name> 未映射“。我认为没有使用辅助连接,不知何故,主连接默认在错误的表上,但我不知道为什么。
我用我的工作上传了this 小型 Github 项目。 https://github.com/victorqedu/MultipleSpringBootDS
更新:在 DAO 类中,a 自动装配了构造函数,@Autowire 设置了错误的 EntityManager(我认为这是问题的根源),我可以手动指定正确的 EntityManager 吗?
@Autowired
public AntibiogramaAntibioticeDAOHibernateImpl(EntityManager theEntityManager) {
entityManager = theEntityManager;
}
我还尝试了 EntityManager 上的注释 @PersistenceContext 但结果是一样的。
@PersistenceContext
private EntityManager entityManager;
我不确定问题是 EntityManagaer 还是我从 EntityManager.unwrap 获得的 Session,似乎很少有关于这个的文档......
【问题讨论】:
-
您需要搜索多个数据库与 JPA,这是一个不同的野兽。您可以在这里找到一种解决方案:baeldung.com/spring-data-jpa-multiple-databases
-
这正是我应用的解决方案,它似乎不起作用。
-
你试过吗公共 AntibiogramaAntibioticeDAOHibernateImpl(@Qualifier("primaryEntityManagerFactory") EntityManager theEntityManager)您可以选择要自动装配的内容预选赛
-
谢谢,这解决了问题,如果您请添加回复,我会将其标记为解决方案。
标签: spring-boot spring-data-jpa spring-rest