Я пытаюсь добавить данные jpa Spring в существующее веб-приложение Spring Boot 2.7.3. Мы используем спящий режим 5.6.9. Я добавил данные jpa Spring в качестве зависимости Maven через идентификатор артефакта Spring-boot-starter-data-jpa, который находится под идентификатором группы org.springframework.boot.
Когда я запускаю веб-приложение весенней загрузки, я в конечном итоге получаю следующую ошибку:
Caused by: java.lang.ClassNotFoundException: Could not load requested class : charset
at org.hibernate.boot.registry.classloading.internal.AggregatedClassLoader.findClass(AggregatedClassLoader.java:210) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final]
at java.lang.ClassLoader.loadClass(ClassLoader.java:587) ~[?:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[?:?]
at java.lang.Class.forName0(Native Method) ~[?:?]
at java.lang.Class.forName(Class.java:467) ~[?:?]
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:130) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final]
at org.hibernate.boot.internal.ClassLoaderAccessImpl.classForName(ClassLoaderAccessImpl.java:67) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final]
at org.hibernate.cfg.annotations.SimpleValueBinder.fillSimpleValue(SimpleValueBinder.java:536) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final]
at org.hibernate.cfg.SetSimpleValueTypeSecondPass.doSecondPass(SetSimpleValueTypeSecondPass.java:25) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final]
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1653) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final]
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1621) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final]
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:295) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1460) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1494) ~[hibernate-core-5.6.10.Final.jar:5.6.10.Final]
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58) ~[spring-orm-5.3.22.jar:5.3.22]
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[spring-orm-5.3.22.jar:5.3.22]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[spring-orm-5.3.22.jar:5.3.22]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[spring-orm-5.3.22.jar:5.3.22]
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) ~[spring-orm-5.3.22.jar:5.3.22]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863) ~[spring-beans-5.3.22.jar:5.3.22]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800) ~[spring-beans-5.3.22.jar:5.3.22]
Вот моя конфигурация jpa весенних данных:
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
basePackages = "com.bottomline.dm.core.repository.roc",
entityManagerFactoryRef = "rocJpaEntityManagerFactory",
transactionManagerRef = "rocJpaTransactionManager"
)
public class RocJpaDatabaseConfig {
private final DataSource rocDataSource;
public RocJpaDatabaseConfig(ROCDataSourceProperties rocDataSourceProperties) {
this.rocDataSource = rocDataSourceProperties.getPostgresHikariDataSource();
DataSourceInfoLogger infoLogger = new DataSourceInfoLogger(rocDataSource);
infoLogger.afterPropertiesSet();
}
@Bean
public LocalContainerEntityManagerFactoryBean rocJpaEntityManagerFactory() {
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
factory.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
factory.setPackagesToScan("com.bottomline.dm.core.domain.entity");
factory.setDataSource(rocDataSource);
return factory;
}
@Bean
public PlatformTransactionManager rocJpaTransactionManager(EntityManagerFactory rocJpaEntityManagerFactory) {
JpaTransactionManager txManager = new JpaTransactionManager();
txManager.setEntityManagerFactory(rocJpaEntityManagerFactory);
return txManager;
}
}
Есть идеи, как пройти этот класс, которого нет в «кодировке»?
Я не могу поделиться всем этим... есть ли какой-то конкретный ключ/значение, которое вы хотели бы знать?
spring.datasource.driver-class-name
и spring.jpa.properties.hibernate.dialect
Диалект спящего режима — PostgreSQL94Dialect
, а имя класса драйвера — org.postgresql.Driver
Интересно, откуда взялось имя класса "charset" - не найдено в опубликованном коде
@user85421 user85421 - мне тоже это интересно. Я добавил данные jpa Spring в существующий проект и не указал ничего, связанного с «кодировкой», поэтому не знаю, откуда они взялись (отсюда и мой вопрос).
Интересно, является ли это проблемой конфликта jar... я прочитал, что Spring-data-jpa переводит в спящий режим, и у нас уже указан спящий режим
«charset» был пользовательским org.hibernate.annotations.Type
, который был определен в одном из существующих объектов в «com.bottomline.dm.core.domain.entity», который EntityManagerFactory
сканировал.
Мне наконец удалось запустить мое приложение, заменив аннотации org.hibernate.annotations.Type
на org.hibernate.annotations.TypeDef
на уровне класса.
Можете ли вы поделиться содержимым файла
application.properties
и информацией о зависимостях maven/gradle?