• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

h2에 테이블 생성이 안됩니다.

23.12.07 01:04 작성 조회수 667

0

00:37:51.408 [main] INFO org.springframework.test.context.support.AnnotationConfigContextLoaderUtils -- Could not detect default configuration classes for test class [jpabook.jpashop.MemberRepositoryTest]: MemberRepositoryTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration.

00:37:51.499 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper -- Found @SpringBootConfiguration jpabook.jpashop.JpashopApplication for test class jpabook.jpashop.MemberRepositoryTest

00:37:51.652 [main] INFO org.springframework.boot.devtools.restart.RestartApplicationListener -- Restart disabled due to context in which it is running

. ____ _

/\\ / ___'_ __ (_)_ _ \ \ \ \

( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \

\\/ ___)| |_)| | | | | || (_| | ) ) ) )

' |____| .__|_| |_|_| |_\__, | / / / /

=========|_|==============|___/=/_/_/_/

:: Spring Boot :: (v3.1.6)

2023-12-07T00:37:51.909+09:00 INFO 12984 --- [ main] jpabook.jpashop.MemberRepositoryTest : Starting MemberRepositoryTest using Java 20.0.2.1 with PID 12984 (started by 장민주 in C:\Users\장민주\Downloads\토이프로젝트\jpashop\jpashop)

2023-12-07T00:37:51.910+09:00 INFO 12984 --- [ main] jpabook.jpashop.MemberRepositoryTest : No active profile set, falling back to 1 default profile: "default"

2023-12-07T00:37:52.453+09:00 INFO 12984 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.

2023-12-07T00:37:52.473+09:00 INFO 12984 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 12 ms. Found 0 JPA repository interfaces.

2023-12-07T00:37:52.903+09:00 INFO 12984 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]

2023-12-07T00:37:52.946+09:00 INFO 12984 --- [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.2.13.Final

2023-12-07T00:37:52.947+09:00 INFO 12984 --- [ main] org.hibernate.cfg.Environment : HHH000406: Using bytecode reflection optimizer

2023-12-07T00:37:53.169+09:00 INFO 12984 --- [ main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer

2023-12-07T00:37:53.192+09:00 INFO 12984 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...

2023-12-07T00:37:53.384+09:00 INFO 12984 --- [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection conn0: url=jdbc:h2:mem:9f0efac1-9002-48e8-bf24-577a044a16d9 user=SA

2023-12-07T00:37:53.386+09:00 INFO 12984 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.

2023-12-07T00:37:54.134+09:00 INFO 12984 --- [ main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)

2023-12-07T00:37:54.146+09:00 DEBUG 12984 --- [ main] org.hibernate.SQL :

drop table if exists member cascade

2023-12-07T00:37:54.148+09:00 DEBUG 12984 --- [ main] org.hibernate.SQL :

drop sequence if exists member_seq

2023-12-07T00:37:54.152+09:00 DEBUG 12984 --- [ main] org.hibernate.SQL :

create sequence member_seq start with 1 increment by 50

2023-12-07T00:37:54.156+09:00 DEBUG 12984 --- [ main] org.hibernate.SQL :

create table member (

id bigint not null,

username varchar(255),

primary key (id)

)

2023-12-07T00:37:54.162+09:00 INFO 12984 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'

2023-12-07T00:37:54.343+09:00 WARN 12984 --- [ main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning

2023-12-07T00:37:54.706+09:00 INFO 12984 --- [ main] jpabook.jpashop.MemberRepositoryTest : Started MemberRepositoryTest in 3.058 seconds (process running for 3.74)

OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended

2023-12-07T00:37:55.191+09:00 DEBUG 12984 --- [ main] org.hibernate.SQL :

select

next value for member_seq

2023-12-07T00:37:55.294+09:00 DEBUG 12984 --- [ main] org.hibernate.SQL :

insert

into

member

(username,id)

values

(?,?)

2023-12-07T00:37:55.295+09:00 TRACE 12984 --- [ main] org.hibernate.orm.jdbc.bind : binding parameter [1] as [VARCHAR] - [memberA]

2023-12-07T00:37:55.296+09:00 TRACE 12984 --- [ main] org.hibernate.orm.jdbc.bind : binding parameter [2] as [BIGINT] - [1]

2023-12-07T00:37:55.304+09:00 INFO 12984 --- [ionShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'

2023-12-07T00:37:55.305+09:00 INFO 12984 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...

2023-12-07T00:37:55.307+09:00 INFO 12984 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.

Process finished with exit code 0

 

 

 

 

이런식으로 뜨면서 테이블 생성이 안되는데

어떻게 해야 될까요?

오류 검색해서 계속 따라해보는데 잘 안됩니다 ㅠㅠ

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.12.09

안녕하세요, 인프런 AI 인턴입니다.
민주님, 제공해주신 로그를 보면 테스트 과정에서 member 테이블을 생성하고 데이터를 삽입하는 SQL 구문이 실행된 것을 확인할 수 있습니다. 로그에 따르면 테스트는 정상적으로 수행되어 Process finished with exit code 0으로 종료되었다고 나와 있습니다. 이는 오류 없이 프로세스가 완료되었다는 의미입니다.

문제는 ‘테이블 생성이 안 된다’는 부분인데, 여기서 주의할 점은 H2 데이터베이스 접속 시나리오에 따라 다를 수 있다는 것입니다. 만약 테스트 시에 임베디드 모드로 H2 데이터베이스를 사용하면, 테스트가 종료될 때 데이터베이스도 함께 종료되어서 실제로 테이블이 유지되지 않습니다.

테스트가 아닌 애플리케이션 실행 시 테이블이 생성되기를 원하신다면 애플리케이션의 프로퍼티 파일에 JPA 설정을 확인해 볼 필요가 있습니다. 예를 들어 spring.jpa.hibernate.ddl-auto 속성을 createupdate로 설정하면 애플리케이션 실행 시점에 데이터베이스 테이블이 생성되거나 업데이트 됩니다.

spring.jpa.hibernate.ddl-auto=create

혹은

spring.jpa.hibernate.ddl-auto=update

추가적으로, 테스트를 하는 경우 데이터베이스가 올바른 모드(임베디드 혹은 서버)로 구동 중인지 확인하고, 속성 파일에서 데이터베이스 URL이 올바르게 설정되어 있는지도 점검해보세요.

application.propertiesapplication.yml 설정 파일에서 올바른 데이터베이스 접속 URL을 설정하고, 개발 환경에 맞는 데이터베이스 연결 정보가 제대로 구성되었는지 확인해 보시기 바랍니다. 예를 들어, 임베디드 모드의 H2 데이터베이스를 사용하는 경우 보통 다음과 같은 설정을 합니다.

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=

애플리케이션의 로그와 설정 파일을 다시 한번 확인해 보시고, 여전히 문제가 해결되지 않는다면 테스트 코드 및 구성 클래스에 @Configuration 어노테이션이 제대로 적용되었는지, @Entity 클래스에 문제가 없는지도 검토해봐야 합니다.

이외에도 추가적인 정보가 필요하면 Spring Boot Reference Documentation의 JPA 관련 설정 부분을 참고하시길 바랍니다.
Spring Boot Reference Documentation v3.1.5

만약 스프링 부트 버전이 3.0 이상이라면, H2 데이터베이스의 버전도 2.1.214 이상을 사용해야 한다는 점을 명심하세요.
지식공유자 김영한님: 인프런 스프링, JPA 강의 자주 하는 질문

추가적으로, 테스트 중에 사용하는 데이터베이스가 실제 파일 기반의 데이터베이스가 아닌 메모리 기반의 데이터베이스(jdbc:h2:mem:testdb)로 설정되어 있다면, 애플리케이션 종료 시 데이터베이스 내용이 모두 소멸하기 때문에 테스트 외부에서 테이블을 조회할 수 없습니다. 이런 경우에는 파일 기반의 데이터베이스로 설정을 변경해보실 수도 있습니다.

문제 해결을 위한 추가 조치가 필요하다면, 좀 더 자세한 설정 파일이나 코드의 정보를 공유해 주시면 도움을 드리기가 더 용이할 것입니다.