spring-data-jpa 具有多个数据库连接的 Spring Boot

lzfw57am  于 2022-11-10  发布在  Spring
关注(0)|答案(1)|浏览(208)

bounty将在2天后过期。回答此问题可获得+50的声望奖励。Victorqedu正在寻找来自知名来源的答案

我做了一个简单的SpringBoot REST应用程序用于测试,其中的表在2个数据库中,一个是Mysql,一个是Postgresql。为了配置这2个连接,我使用了here中的指令,在第6点-“Spring Boot中的多个数据库”,似乎一切都很好,启动了2个连接,但只有主连接工作。
因此,如果Mysql连接被注解为@ Primy,则可能只有Mysql REST服务可以工作,在Postgresql上,所有表的错误都是“org. hib.hql.internal.ast.QuerySyntaxException:没有<Entity_Name>Map"。但是如果我做一个单一的更改并在Postgresql连接上设置@Primary,那么所有Postgres表都可以工作,所有Mysql表都给予相同的错误(表没有Map)。
因此,我认为正确的连接不是基于软件包自动选择的。

UPDATE:我发现另一个教程here使用不同的数据库类型,我按照说明操作,但结果是相同的,辅助数据库中的所有表都给予错误“org. hib.hql.internal.ast.QuerySyntaxException:没有<Entity_Name>Map"。我认为没有使用辅助连接,不知何故,主连接默认在错误的表上,但我不知道为什么。

我上传了this小Github项目与我的工作。https://github.com/victorqedu/MultipleSpringBootDS

UPDATE:在DAO类中,a已经自动连接了构造函数,而@Autowire设置了错误的EntityManager(我认为这是问题的根源),我可以手动指定正确的EntityManager吗?

@Autowired
public AntibiogramaAntibioticeDAOHibernateImpl(EntityManager theEntityManager) {
    entityManager = theEntityManager;
}

我还在EntityManager上尝试了注解@PersistenceContext,但结果是相同的。

@PersistenceContext
private EntityManager entityManager;

我不确定问题出在EntityManagaer还是我从EntityManager.unwrap获得的会话上,似乎很少有关于此的文档...

uurity8g

uurity8g1#

这可以通过简短描述中的限定符来解决如果您有多个相同类型的Bean(如EntityManager),则应使用限定符来连接它们。
因此,在代码中应

public AntibiogramaAntibioticeDAOHibernateImpl(@Qualifier("primaryEntityManagerFactory") EntityManager theEntityManager)

相关问题