인프런 커뮤니티 질문&답변

PA J님의 프로필 이미지
PA J

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

데이터베이스 스키마 자동 생성

auto 설정시 drop 에러

작성

·

151

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.

 

 

INFO: HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)

Hibernate:

drop table Member cascade constraints

Hibernate:

create table Member (

id number(19,0) not null,

grade varchar2(255 char),

name varchar2(255 char),

primary key (id)

)

5월 22, 2024 4:56:36 오후 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection

INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@4e83a98] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.

5월 22, 2024 4:56:36 오후 org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleException

WARN: GenerationTarget encountered exception accepting command : Error executing DDL "

drop table Member cascade constraints" via JDBC [Table "MEMBER" not found;]

org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "

drop table Member cascade constraints" via JDBC [Table "MEMBER" not found;]

at

 

최초 자동 생성할 때 Member 테이블이 존재 해야 하나요 ??

저는 Member 테이블이 없어서 drop 할 수 없다고 하는거 같은데

 

Member 테이블이 없어도 auto 옵션을 켜놓으면 자동으로 생성되어야 하는 개념 아닌가요 ???

답변 2

0

안녕하세요. PA J님, 공식 서포터즈 OMG입니다.

생성된 DDL문을 보면 varchar가 아닌 varchar2인점, 그리고 id가 bigint가 아니고 number(19,0)

점을 미루어보아 강의에서 진행하는 h2가 아닌 다른 DB 벤더를 사용하신 것 같습니다. 개인적인 예상으로 Oracle 을 사용중이실 것 같은데요. 정확한 이유까지는 모르겠지만 해당 DB 벤더에서는 하이버네이트가 ddl-auto문으로 생성된 drop 테이블 쿼리에 constraint 제약 조건을 추가하는 것 같습니다. 이는 모든 DB에 공통사항은 아니고 현재 적용하신 DB 벤더 혹은 하이버네이트 버전마다 달라질 수 있는 요소일 것 같습니다.

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.

질문자님께서 겪고 계신 문제는 hibernate.hbm2ddl.auto 설정과 관련된 DATABASE의 DDL(Data Definition Language) 실행 중 오류에 대한 것으로 보입니다. 이 설정은 Hibernate가 세션 팩토리를 시작할 때 데이터베이스 스키마를 자동으로 생성, 갱신, 검증, 삭제하는 역할을 합니다. create, create-drop, validate, update 등의 속성값을 가질 수 있습니다.

질문의 핵심은 drop table Member cascade constraints 명령을 실행할 때 “Table \“MEMBER\” not found” 오류가 발생하는 부분인데, 이는 Member 테이블이 데이터베이스에 존재하지 않아 발생하는 문제로 보입니다.

hibernate.hbm2ddl.auto 설정의 create 또는 create-drop 옵션을 사용할 때, Hibernate는 해당 세션 팩토리가 시작할 때 데이터베이스 스키마를 생성합니다. 만약 테이블이 이미 존재하면, 이전의 테이블을 삭제(drop)하고 새로 생성(create)하는 과정을 가집니다. 그런데, drop을 시도할 때 해당 테이블이 실제로 존재하지 않으면, 에러 로그를 출력하긴 하지만 이는 치명적인 오류는 아닙니다. Hibernate는 계속해서 테이블을 새로 생성해 나갈 것입니다.

도움이 될만한 유사한 상황에 대한 질문 링크는 다음과 같습니다:
- ddl-auto 관련해서 질문드립니다 - 이 질문에서는 DATA BASE 속성 중 하나인 ddl-auto와 관련된 문제를 다루고 있으며, 오라클 DB와 연동할 때 if exist 같은 존재 여부 확인 후 테이블 생성 방법에 대한 답변을 확인하실 수 있습니다. 데이터베이스마다 ddl-auto 실행 시 오류 처리 방식이 다를 수 있으며, 특정 DB에서는 if exists 조건을 지원하지 않을 수 있기에 이와 유사한 문제일 경우 참조하시면 도움이 될 것입니다.

정리하자면, 질문자님의 경우 Member 테이블이 처음부터 없는 상태에서 create 옵션을 사용하고 계시다면, drop 명령에서 발생하는 위와 같은 오류 메시지는 실제 작업 수행에 실패를 의미하지 않습니다. Hibernate는 계속해서 Member 테이블을 생성할 것입니다. 따라서, 설정이 올바르게 적용되었다면 에러 로그에 혼동되지 않으셔도 됩니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

PA J님의 프로필 이미지
PA J

작성한 질문수

질문하기