programing

Spring Boot : 'jpaMappingContext' 이름의 bone을 만드는 중 오류가 발생했습니다. java.lang.Null 포인터예외.

muds 2023. 8. 4. 23:23
반응형

Spring Boot : 'jpaMappingContext' 이름의 bone을 만드는 중 오류가 발생했습니다. java.lang.Null 포인터예외.

Spring Boot + Spring Data Jpa + Multiple Database의 조합입니다.응용 프로그램을 시작할 때 NullPointer 예외를 따르고 있습니다.부팅 시 SPring Data가 JPA 메타데이터를 생성할 수 없는 것 같습니다.저는 이 오류와 관련된 리소스를 받지 못했습니다.

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaMappingContext': Invocation of init method failed; nested exception is java.lang.NullPointerException
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:736)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:686)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:320)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:957)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:946)
        at com.verient.infinipay.staticcard.Application.main(Application.java:25)
        ... 6 more
Caused by: java.lang.NullPointerException
        at org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean.getMetamodels(JpaMetamodelMappingContextFactoryBean.java:90)
        at org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean.createInstance(JpaMetamodelMappingContextFactoryBean.java:56)
        at org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean.createInstance(JpaMetamodelMappingContextFactoryBean.java:26)
        at org.springframework.beans.factory.config.AbstractFactoryBean.afterPropertiesSet(AbstractFactoryBean.java:134)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1633)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570)
        ... 21 more

내 코드:

    public EntityManagerFactory apEntityManagerFactory(
            EntityManagerFactoryBuilder builder) {
        return builder
                .dataSource(apDataSource())
                .packages(Entity1.class, Entity2.class)
                .persistenceUnit("ap-persistent-unit")
                .build()
                .getObject();
    }

    @Bean
    public EntityManagerFactory trEntityManagerFactory(
            EntityManagerFactoryBuilder builder) {
        return builder
                .dataSource(trDataSource())
                .packages(Entity3.class, Entity4.class)
                .persistenceUnit("tr-persistent-unit")
                .build()
                .getObject();
    }

    @Bean
    JpaTransactionManager apTransactionManager(@Qualifier("apEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(entityManagerFactory);
        return transactionManager;
    }

    @Bean
    JpaTransactionManager trTransactionManager(@Qualifier("trEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(entityManagerFactory);
        return transactionManager;
    }

또한 application.properties에 다음과 같은 최대 절전 모드 속성이 있습니다.

spring.jpa.hibernate.ddl-auto: update
spring.jpa.hibernate.naming_strategy: org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.database: H2
spring.jpa.show-sql: true

스프링 부팅에서는 클래스 경로에 이미 있는 데이터 소스에 대해 자동 구성 클래스가 기본적으로 활성화되어 있습니다.사용하지 않도록 설정할 자동 구성 클래스를 명시적으로 제외해야 합니다.

예:

@EnableAutoConfiguration(exclude = {JndiConnectionFactoryAutoConfiguration.class,DataSourceAutoConfiguration.class,
                                    HibernateJpaAutoConfiguration.class,JpaRepositoriesAutoConfiguration.class,DataSourceTransactionManagerAutoConfiguration.class})
@ComponentScan
public class MyBootApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyBootApplication.class, args);
    }
}

제가 보기에 이것은 다음과 같은 맞춤형 구현 때문인 것으로 밝혀졌습니다.org.hibernate.usertype.UserTypeJSON 유형을 Java 개체에 매핑하는 데 사용했습니다.

저의 경우에는 java.util에 매핑되어 있었습니다.지도와 Spring Data JPA의 이러한 변경으로 인해 해당 버전으로 업그레이드할 때 회귀가 발생했습니다.

수정 사항은 지도에 대한 일반 유형을 명시적으로 설정하는 것이었습니다.Map<String, Object>나의 경우에는

아이디어에 대해 비샬에게 감사드립니다.제 경우에는 제네릭이 없는 구현이었습니다.javax.persistence.AttributeConverter이 예외를 유발한 것.변화하는class MapConverter implements AttributeConverter<Map, String> { ... }로.class MapConverter implements AttributeConverter<Map<String, Object>, String> { ... }정말 도움이 되었습니다.

저는 일대일 관계에서의 매핑과 관련하여 언급된 문제에 직면했습니다.

제 앱은 다음과 같은 OneToOne 관계를 가지고 있습니다.

A ||---|| B

B ||---|| C
Since its OnetoOne, I kept entity B primary key same as entity A, using @MapsId as mentioned here 

https://vladmihalcea.com/the-best-way-to-map-a-onetoone-relationship-with-jpa-and-hibernate/

Similarly I kept entity C primary key same as entity B.

나는 이렇게 관계를 바꿔서 이것을 고쳤습니다.

A ||---|| B

A ||---|| C

언급URL : https://stackoverflow.com/questions/30271112/spring-boot-error-creating-bean-with-name-jpamappingcontext-java-lang-nullp

반응형