Overview

Spring Boot Version: >= 3.x.x

I have a project with multiple JPA DataSources over multiple configuration classes using @EnableJpaRepositories.

The project runs normally with Spring Boot 3.0.0 without native support, but when I generate the AOT classes and run with -Dspring.aot.enabled=true, the repository beans can not be resolved and the application does not start.

2022-11-28T09:48:17.201+01:00  INFO 17832 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2022-11-28T09:48:17.215+01:00  INFO 17832 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2022-11-28T09:48:17.216+01:00  INFO 17832 --- [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.1]
2022-11-28T09:48:17.314+01:00  INFO 17832 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2022-11-28T09:48:17.315+01:00  INFO 17832 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 669 ms
2022-11-28T09:48:17.457+01:00  INFO 17832 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: another]
2022-11-28T09:48:17.539+01:00  INFO 17832 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 6.1.5.Final
2022-11-28T09:48:17.746+01:00  WARN 17832 --- [           main] org.hibernate.orm.deprecation            : HHH90000021: Encountered deprecated setting [javax.persistence.sharedCache.mode], use [jakarta.persistence.sharedCache.mode] instead
2022-11-28T09:48:17.931+01:00  INFO 17832 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2022-11-28T09:48:18.112+01:00  INFO 17832 --- [           main] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Added connection conn0: url=jdbc:h2:mem:anotherdb user=SA
2022-11-28T09:48:18.114+01:00  INFO 17832 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2022-11-28T09:48:18.153+01:00  INFO 17832 --- [           main] SQL dialect                              : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
2022-11-28T09:48:18.922+01:00  INFO 17832 --- [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2022-11-28T09:48:18.931+01:00  INFO 17832 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'another'
2022-11-28T09:48:18.946+01:00  INFO 17832 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: maindatabase]
2022-11-28T09:48:18.951+01:00  WARN 17832 --- [           main] org.hibernate.orm.deprecation            : HHH90000021: Encountered deprecated setting [javax.persistence.sharedCache.mode], use [jakarta.persistence.sharedCache.mode] instead
2022-11-28T09:48:18.961+01:00  INFO 17832 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-2 - Starting...
2022-11-28T09:48:18.963+01:00  INFO 17832 --- [           main] com.zaxxer.hikari.pool.HikariPool        : HikariPool-2 - Added connection conn10: url=jdbc:h2:mem:maindb user=SA
2022-11-28T09:48:18.963+01:00  INFO 17832 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-2 - Start completed.
2022-11-28T09:48:18.964+01:00  INFO 17832 --- [           main] SQL dialect                              : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
2022-11-28T09:48:18.997+01:00  INFO 17832 --- [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2022-11-28T09:48:18.998+01:00  INFO 17832 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'maindatabase'
2022-11-28T09:48:19.002+01:00  WARN 17832 --- [           main] w.s.c.ServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'demoRestController': Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type 'com.example.aopmultijpa.databases.maindatabase.repositories.MainTableRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
2022-11-28T09:48:19.002+01:00  INFO 17832 --- [           main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'maindatabase'
2022-11-28T09:48:19.004+01:00  INFO 17832 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-2 - Shutdown initiated...
2022-11-28T09:48:19.007+01:00  INFO 17832 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-2 - Shutdown completed.
2022-11-28T09:48:19.007+01:00  INFO 17832 --- [           main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'another'
2022-11-28T09:48:19.007+01:00  INFO 17832 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2022-11-28T09:48:19.008+01:00  INFO 17832 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.
2022-11-28T09:48:19.011+01:00  INFO 17832 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2022-11-28T09:48:19.047+01:00 ERROR 17832 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of constructor in com.example.aopmultijpa.service.DemoRestController required a bean of type 'com.example.aopmultijpa.databases.maindatabase.repositories.MainTableRepository' that could not be found.


Action:

Consider defining a bean of type 'com.example.aopmultijpa.databases.maindatabase.repositories.MainTableRepository' in your configuration.

Steps to Reproduce

I created an demo/sample project (multijpa.zip) with two H2 databases and two configs with one repository and an entity each and a tiny RestController which will autowire the two repositories.

  1. extract the attached gradle project zip
  2. run graddle aotClasses generation
  3. Start MultijpaApplication with -Dspring.aot.enabled=true JVM Parameter

Comment From: pnijem

Hi

I am also having a similar issue, which I've been trying to solve for two days already. In my case it is not detecting the Entity. Thus, it is throwing UnsatisfiedDependencyException

The SomeEntity (annotated by @Entity) is used in SomeRepository (annotated by @Repository). Also in my case, the project is able to start in SB 3.0.0 without the native support.

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'rabbitMQConsumer': Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'someService': Unsatisfied depend
ency expressed through constructor parameter 0: Error creating bean with name 'someRepository': Not a managed type: class com.someCompany.model.SomeEntity
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.resolveArgument(BeanInstanceSupplier.java:351)
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.resolveArguments(BeanInstanceSupplier.java:271)
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.get(BeanInstanceSupplier.java:206)
        at com.someCompany.SomeApplication.main(SomeApplication.java:26)
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'someService': Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'someRepository': Not 
a managed type: class com.someCompany.model.SomeEntity
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.resolveArgument(BeanInstanceSupplier.java:351)
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.resolveArguments(BeanInstanceSupplier.java:271)
        at org.springframework.beans.factory.aot.BeanInstanceSupplier.get(BeanInstanceSupplier.java:206)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'someRepository': Not a managed type: class com.someCompany.model.SomeEntity
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1751)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521)
Caused by: java.lang.IllegalArgumentException: Not a managed type: class com.someCompany.model.SomeEntity
        at org.hibernate.metamodel.model.domain.internal.JpaMetamodelImpl.managedType(JpaMetamodelImpl.java:181)
        at org.hibernate.metamodel.model.domain.internal.MappingMetamodelImpl.managedType(MappingMetamodelImpl.java:496)
        at org.hibernate.metamodel.model.domain.internal.MappingMetamodelImpl.managedType(MappingMetamodelImpl.java:99)
        at org.springframework.data.jpa.repository.support.JpaMetamodelEntityInformation.<init>(JpaMetamodelEntityInformation.java:77)

Comment From: sbrannen

@pnijem, the behavior you have described sounds like it might be a separate issue.

Would you mind creating a new issue to discuss that particular failure (including a sample application which demonstrates the behavior)?

Comment From: snicoll

Thanks for the report and the sample @svenm1982 and sorry it took so long. There's now a fix for this in 6.0.10-SNAPSHOT. Unfortunately, the fix didn't make it in time for Spring Boot 3.0.7 to be scheduled this week but it'll be available in the next one in June.

Duplicates #30476.

There might be some work needed in terms of supporting multiple datasources, see https://github.com/spring-projects/spring-data-jpa/issues/2753#issuecomment-1545850183.

Comment From: DigitalMediageek

I don't know if it helps but I came across the "not a managed type" error when running a native spring-boot app with multiple databases, too. Turns out to be a configuration issue on my side. See issue 39266. Here is my sample repo of a working native application which demonstrates how to setup custom datasources and run multiple databases.