본문 바로가기

Lang

[java]r2dbc 와 jpa/jdbc 같이 사용 시 에러 해결법

R2DBC 와 jpa/jdbc 를 같이 사용할 일이 생겨서 설정 변경 후 실행하는 과정에서 몇 가지 문제에 부딪혔다.

완벽한 해결책은 아닐 듯 싶지만 위 이슈 페이지 참고해서 급한 문제는 아래 방식으로 해결.

( 당연히 설정 파일에 r2dbc, jpa/jdbc 용 설정 두 가지 다 해줘야 하고 이건 별다를거 없으니 생략. )

1. '... Repository' that could not be found' 또는 'Reactive Repositories are not supported by JPA' 에러

R2DBC 와 JPA/JDBC 용 repository 를 같은 패키지 내에 배치하면 둘 중 한 쪽 Repo 인터페이스를 못 찾거나 Reactive Repositories 는 JPA 에서 지원하지 않는다는 에러 발생.

이같은 경우에는 패키지 분리 후 @Enable***Repositories 애노테이션으로 각각의 repo 패키지를 분리 설정한다.

  • 각각의 repo 인터페이스를 다른 패키지로 분리
  • SpringBoot Application 클래스에서 애노테이션 이용하여 다음과 같은 식으로 각 패키지 지정.

@EnableJpaRepositories("com.jpa_jdbc용.repo")
@EnableR2dbcRepositories("com.r2dbc용.repo")

2. 'Reactive Repositories are not supported by JDBC.' 에러

또는 repo 분리 설정(위 1번) 했음에도 'Parameter 0 of method setMappingContext in org.springframework.data.jdbc.repository.support.JdbcRepositoryFactoryBean required a single bean, but 2 were found' 에러가 나는 경우.

import org.springframework.data.relational.core.mapping.Table;

@Table("my_table")

만약 엔티티에서 @Table 애노테이션을 앞에서 처럼 사용하고 있는 경우에 발생한다. 다음과 같이 javax.persistence 에서 제공하는 @Table 애노테이션 사용하게 바꿔줘야 한다.

import javax.persistence.*;

@Table(name = "my_table")

 

3. '... required a bean named 'entityManagerFactory' that could not be found.'

@Configuration 파일에 아래 애노테이션 추가.

@Import(DataSourceAutoConfiguration.class)