Java.lang.ClassNotFoundException: не удалось загрузить запрошенный класс: кодировка

Я пытаюсь добавить данные 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;
    }
}

Есть идеи, как пройти этот класс, которого нет в «кодировке»?

Можете ли вы поделиться содержимым файла application.properties и информацией о зависимостях maven/gradle?

Vasanth Subramanian 19.07.2024 22:39

Я не могу поделиться всем этим... есть ли какой-то конкретный ключ/значение, которое вы хотели бы знать?

Zack Macomber 19.07.2024 22:42
spring.datasource.driver-class-name и spring.jpa.properties.hibernate.dialect
Vasanth Subramanian 19.07.2024 22:44

Диалект спящего режима — PostgreSQL94Dialect, а имя класса драйвера — org.postgresql.Driver

Zack Macomber 19.07.2024 22:49

Интересно, откуда взялось имя класса "charset" - не найдено в опубликованном коде

user85421 20.07.2024 09:44

@user85421 user85421 - мне тоже это интересно. Я добавил данные jpa Spring в существующий проект и не указал ничего, связанного с «кодировкой», поэтому не знаю, откуда они взялись (отсюда и мой вопрос).

Zack Macomber 22.07.2024 14:13

Интересно, является ли это проблемой конфликта jar... я прочитал, что Spring-data-jpa переводит в спящий режим, и у нас уже указан спящий режим

Zack Macomber 22.07.2024 15:48
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
7
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

«charset» был пользовательским org.hibernate.annotations.Type, который был определен в одном из существующих объектов в «com.bottomline.dm.core.domain.entity», который EntityManagerFactory сканировал.

Мне наконец удалось запустить мое приложение, заменив аннотации org.hibernate.annotations.Type на org.hibernate.annotations.TypeDef на уровне класса.

Другие вопросы по теме