При переходе с Spring Boot 2.4.3 на Spring Boot 3.2.2 (с использованием Java 17.0.2) я столкнулся со следующей проблемой с Spring Data JPA и Hibernate >:
org.springframework.beans.factory.BeanCreationException: ошибка при создании bean-компонента с именем defaultEntityManagerFactory, определенным в ресурсе пути к классу [de/mycompany/vector/backend/config/DefaultJPAConfig.class]: Интерфейс EntityManagerFactory [interface org.hibernate.SessionFactory], похоже, конфликтует с миксином Spring EntityManagerFactoryInfo. Рассмотрите возможность сброса свойства 'entityManagerFactoryInterface' на простое [jakarta.persistence.EntityManagerFactory] в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1773) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) ... в org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) в de.mycompany.vector.backend.Application.main(Application.java:21) Вызвано: java.lang.IllegalStateException: интерфейс EntityManagerFactory [interface org.hibernate.SessionFactory], кажется, конфликтует с миксином Spring EntityManagerFactoryInfo - рассмотрите возможность сброса свойства 'entityManagerFactoryInterface' на простое [jakarta.persistence.EntityManagerFactory] в org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.createEntityManagerFactoryProxy(AbstractEntityManagerFactoryBean.java:469) ... Вызвано: java.lang.IllegalArgumentException: методы с той же сигнатурой getSchemaManager(), но несовместимыми типами возврата: [interface org.hibernate.relational.SchemaManager, интерфейс jakarta.persistence.SchemaManager] в java.base/java.lang.reflect.ProxyGenerator.checkReturnTypes(ProxyGenerator.java:311) Полный вывод командной строки при запуске приложения выглядит следующим образом:
jdk17.0.2\bin\java.exe -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:61495,suspend=y,server=n -XX:TieredStopAtLevel=1 -Dspring.profiles. active=dev -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-Dmanagement.endpoints .jmx.exposure.include=*" -javaagent:C:\Users\Me\AppData\Local\JetBrains\IntelliJIdea2023.3\captureAgent\debugger-agent.jar=file:/C:/Users/Me/AppData/Local /Temp/1/capture.props -Dfile.encoding=UTF-8 -classpath C:\Users\Me\AppData\Local\Temp\1\classpath477957752.jar de.mycompany.vector.backend.Application Подключено к целевой виртуальной машине, адрес: «127.0.0.1:61495», транспорт: «сокет». MySpringBootBackendApp [бэкэнд Spring Boot] 2024-02-27 17:33:51,302 ИНФОРМАЦИЯ [background-preinit] o.h.v.i.u.Версия: HV000001: Hibernate Validator 8.0.1.Final 2024-02-27 17:33:51,380 ИНФОРМАЦИЯ [main] osb.StartupInfoLogger: запуск приложения с использованием Java 17.0.2 с PID 30932 (C:\Develop\projects\myapp\src\backend\target\classes, запущенный мной в C: \Develop\projects\myapp\src\backend) 2024-02-27 17:33:51,381 DEBUG [main] o.s.b.StartupInfoLogger: запуск с Spring Boot v3.2.2, Spring v6.1.3 2024-02-27 17:33:51,382 ИНФОРМАЦИЯ [main] o.s.b.SpringApplication: активен следующий 1 профиль: «dev» 2024-02-27 17:33:55,279 ИНФОРМАЦИЯ [main] o.s.d.r.c.RepositoryConfigurationDelegate: загрузка репозиториев Spring Data JPA в режиме DEFAULT. 2024-02-27 17:33:55,536 INFO [main] o.s.d.r.c.RepositoryConfigurationDelegate: завершено сканирование репозитория Spring Data за 244 мс. Найдено 19 интерфейсов репозитория JPA. 2024-02-27 17:33:59,911 ИНФОРМАЦИЯ [основная] o.s.b.w.e.t.TomcatWebServer: Tomcat инициализирован с портом 8081 (http) 2024-02-27 17:33:59,930 ИНФОРМАЦИЯ [main] o.a.j.l.DirectJDKLog: Инициализация ProtocolHandler ["http-nio-8081"] 2024-02-27 17:33:59,934 ИНФОРМАЦИЯ [основная] o.a.j.l.DirectJDKLog: Запуск службы [Tomcat] 2024-02-27 17:33:59,935 ИНФОРМАЦИЯ [основная] o.a.j.l.DirectJDKLog: Запуск механизма сервлетов: [Apache Tomcat/10.1.18] 2024-02-27 17:34:00,109 ИНФОРМАЦИЯ [main] o.a.j.l.DirectJDKLog: Инициализация встроенного Spring WebApplicationContext 2024-02-27 17:34:00,112 INFO [main] o.s.b.w.s.c.ServletWebServerApplicationContext: Root WebApplicationContext: инициализация завершена за 8480 мс 2024-02-27 17:34:03,136 ИНФОРМАЦИЯ [основная] ofc.i.ls.Slf4jLog: База данных: jdbc:oracle:thin:@MS9161.itrm.de
Исключение возникает после создания bean-компонента 'defaultEntityManagerFactory'.
пакет de.mycompany.vector.backend.config; импортировать jakarta.persistence.EntityManagerFactory; импортировать org.springframework.beans.factory.annotation.Autowired; импортировать org.springframework.beans.factory.annotation.Qualifier; импортировать org.springframework.boot.autoconfigure.orm.jpa.JpaProperties; импортировать org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder; импортировать org.springframework.context.annotation.Bean; импортировать org.springframework.context.annotation.Configuration; импортировать org.springframework.context.annotation.Primary; импортировать org.springframework.core.env.Environment; импортировать org.springframework.core.io.ClassPathResource; импортировать org.springframework.core.io.Resource; импортировать org.springframework.data.jpa.repository.config.EnableJpaRepositories; импортировать org.springframework.jdbc.core.JdbcTemplate; импортировать org.springframework.jdbc.datasource.DriverManagerDataSource; импортировать org.springframework.jdbc.datasource.init.DatabasePopulator; импортировать org.springframework.jdbc.datasource.init.DatabasePopulatorUtils; импортировать org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; импортировать org.springframework.orm.jpa.JpaTransactionManager; импортировать org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; импортировать org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; импортировать org.springframework.transaction.PlatformTransactionManager; импортировать org.springframework.transaction.annotation.EnableTransactionManagement; импортировать org.springframework.util.CollectionUtils; импортировать javax.sql.DataSource; импортировать java.util.Map; импортировать java.util.Properties; @Конфигурация @EnableTransactionManagement @EnableJpaRepositories(basePackages = "de.mycompany.vector.backend.dao", entityManagerFactoryRef = "defaultEntityManagerFactory", транзакцияManagerRef = "defaultTransactionManager" ) общественный класс DefaultJPAConfig { частная конечная среда среды; частный окончательный JpaProperties jpaProperties; public DefaultDataSourceConfig(@Autowired Environment env, @Autowired JpaProperties jpaProperties) { this.env = env; this.jpaProperties = jpaProperties; } @Bean(name = {"defaultDataSource"}) @Начальный общедоступный источник данных defaultDataSource() { если (окр == ноль) { вернуть ноль; } DriverManagerDataSource dataSource = новый DriverManagerDataSource(); Строка URL = env.getProperty("spring.datasource.url"); Строковый драйвер = env.getProperty("spring.datasource.driver-class"); String username = env.getProperty("spring.datasource.username"); Строковый пароль = env.getProperty("spring.datasource.password"); dataSource.setDriverClassName(драйвер); dataSource.setUrl(url); dataSource.setUsername(имя пользователя); dataSource.setPassword(пароль); Ресурс initSchema = новый ClassPathResource("schema.sql"); если (initSchema.exists()) { DatabasePopulator dataPopulator = новый ResourceDatabasePopulator(initSchema); DatabasePopulatorUtils.execute(databasePopulator, dataSource); } вернуть источник данных; } /** * предоставить простой шаблон jdbc для экспорта данных без использования дорогостоящих функций JPA/ORM. */ @Bean(name = {"nbpJdbcTemplate"}) общественный JdbcTemplate jdbcTemplate() { вернуть новый JdbcTemplate(defaultDataSource()); } @Bean(name = «defaultEntityManagerFactory») @Начальный @Autowired public LocalContainerEntityManagerFactoryBean defaultEntityManagerFactory( EntityManagerFactoryBuilder, @Qualifier("defaultDataSource") DataSource ds) { вернуть объектManagerFactoryBuilder .dataSource(дс) .packages("de.mycompany.vector.backend.model") .properties(jpaProperties != null ? jpaProperties.getProperties() : null) .persistenceUnit("по умолчанию") .строить(); } @Bean(name = «defaultTransactionManager») @Начальный @Autowired public PlatformTransactionManager defaultTransactionManager (EntityManagerFactoryentityManagerFactory) { вернуть новый JpaTransactionManager(entityManagerFactory); } } Конфигурация, связанная с Spring Boot/JPA, в файле контекста приложения application-dev.yml:
весна: ... йпа: # шоу-sql: правда спящий режим: ddl-auto: подтвердить именование: физическая стратегия: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl характеристики: спящий режим: jdbc: размер_пакета: 500 Джакарта: упорство: генерация схемы: сценарии: действие: создать создать-цель: создать.sql создать-источник: метаданные источник данных: URL: jdbc:oracle:thin:@myDBHost
org.springframework.boot spring-boot-starter-parent 3.2.2 ... ... org.springframework.boot spring-boot-starter-data-jpa org.apache.tomcat tomcat-jdbc com.oracle.database.jdbc ojdbc10 19.22.0.0 ... Любая помощь будет очень признательна!
С уважением,
Майк