java.lang.ClassNotFoundException:无法加载请求的类:字符集

问题描述 投票:0回答:1

我正在尝试将 spring data jpa 添加到现有的 spring boot 2.7.3 Web 应用程序。我们使用的是 hibernate 5.6.9。我已经通过 org.springframework.boot 组 id 下的 spring-boot-starter-data-jpa 工件 id 添加了 spring data jpa 作为 Maven 依赖项。

当我启动 Spring Boot Web 应用程序时,我最终收到以下错误:

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]

这是我的 spring data 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;
    }
}

有什么想法如何通过“字符集”上找不到的这门课吗?

java spring spring-boot hibernate spring-data-jpa
1个回答
0
投票

“charset”是一个自定义

org.hibernate.annotations.Type
,它是在
EntityManagerFactory
正在扫描的“com.bottomline.dm.core.domain.entity”中的现有实体之一中定义的。

通过在类级别用

org.hibernate.annotations.Type
替换
org.hibernate.annotations.TypeDef
注释,最终能够启动并运行我的应用程序。

© www.soinside.com 2019 - 2024. All rights reserved.