spring-boot - Spring Boot:为什么在使用多个数据源时未在 createQuery 中扫描实体?
问题描述
我正在使用 Spring Boot 2.3.0。我有 2 个数据源,一个用于 oracle,一个用于在 application.properties 中定义的 h2。我必须@Configuration
为数据配置提供 2 个类。两个类都实现:
DataSource
PlatformTransactionManager
LocalContainerEntityManagerFactoryBean
在LocalContainerEntityManagerFactoryBean
我设置:
setDataSource
setPackagesToScan
setJpaVendorAdapter
应用程序正常启动,我什至可以.findAll
对 H2 数据库中的表执行操作,但是一旦我开始在存储库实现中执行自定义方法,例如:
@Transactional(readOnly = true)
private Optional<List<Foo>> findFooByState(Optional<Integer> id, Foo.State state) {
CriteriaBuilder cp = em.getCriteriaBuilder();
CriteriaQuery<Foo> cqFoo= cp.createQuery(Foo.class);
Root<Foo> fooRoot = cqFoo.from(Foo.class);
[...]
Spring 抛出异常,例如:
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception
[Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: Not an entity: class foo.Foo;
nested exception is java.lang.IllegalArgumentException: Not an entity: class foo.Foo] with root cause
正如我之前写的那样,foo
添加了包。setPackagesToScan
我已经尝试了各种方法@Transactional
,例如删除它,添加其中指定的事务管理器的名称DataSource
,将 移动@Transactional
到@GetMapping
,但没有任何帮助。
有人知道我在做什么错吗?谢谢,
解决方案
我有一个类似的问题。很可能您还没有配置 JPA 存储库基础包来为不同的数据源选择不同的实体。您可以查看我的指南,了解如何 在 Spring Boot 应用程序中配置两个数据源。希望它会有所帮助!
推荐阅读
- r - R 语言:矩阵或数字 DataFrame 作为散点图,以 X 作为列索引,并针对 X 绘制相应的行元素
- python - Pytorch vsion 大小不匹配,m1
- sql - 为 Google 数据洞察存储数据
- google-apps-script - 按父级过滤 Gmail 标签以在一定天数后删除
- swift - 暗模式 - 按钮和字体颜色
- objective-c - 是否可以防止对象的属性更改在 Swift/Obj-c 中触发 didSet{}
- amazon-web-services - 如何将私有容器从 AWS ECR 拉到本地集群
- laravel - 如何在 Laravel 的特定频道中使用 report() 函数?
- python - Selenium 查找具有表单操作的元素
- asp.net - 在 ASP.NET Excel .con() 函数调用期间未找到 Microsoft ACE OLEDB 12.0