【发布时间】:2020-11-13 23:29:17
【问题描述】:
我使用的是 Spring Boot 2.3.0。我有 2 个数据源,一个用于 oracle,一个用于在 application.properties 中定义的 h2。
我必须为数据配置 2 个@Configuration 类。两个类都实现了:
DataSourcePlatformTransactionManagerLocalContainerEntityManagerFactoryBean
在LocalContainerEntityManagerFactoryBean我设置:
setDataSourcesetPackagesToScansetJpaVendorAdapter
应用程序正常启动,我什至可以在 H2 数据库中的表上做.findAll,但是
一旦我开始在存储库实现中执行自定义方法,例如:
@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,但没有任何帮助。
有人知道我做错了什么吗? 谢谢,
【问题讨论】:
标签: spring-boot jpa datasource