inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

실전 예제 6 - 값 타입 매핑

데이터베이스 스키마 자동생성(create)인데 시작시 테이블 drop이 잘 안됩니다

해결된 질문

365

초코우유

작성한 질문수 3

0

질문 올리기 전에 하이버네이트랑 H2 데이터베이스를 모두 latest stable 버전으로 올렸더니 의외로 해결됐습니다

아마 옛날 버전에 버그가 있거나 버전 궁합이 잘 안맞아서 그랬던것 같습니다

 

혹시나 저랑 같은 문제를 겪으시는 분들을 위해 질문은 남겨봅니다!

=============

제목이랑 같은데요, persistence.xml에서 

<property name="hibernate.hbm2ddl.auto" value="create" />

을 적용하고 메인함수를 실행하면 db를 싹 비운 처음에는 잘 되는데, 두번째부터는 처음에 모든 테이블을 drop하고 실행하는데 이 drop이 제대로 작동하지 않는 것 같습니다. 

 

=== 로그===

..중략...

 

2월 15, 2022 3:57:47 오후 org.hibernate.dialect.Dialect <init>

INFO: HHH000400: Using dialect: org.hibernate.dialect.H2Dialect

Hibernate: 

    

    drop table Category if exists

Hibernate: 

    

    drop table category_item if exists

Hibernate: 

    

    drop table Delivery if exists

Hibernate: 

    

    drop table Item if exists

Hibernate: 

    

    drop table Member if exists

2월 15, 2022 3:57:48 오후 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection

INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@65eb76cd] 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.

2월 15, 2022 3:57:48 오후 org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleException

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

    drop table Category if exists" via JDBC Statement

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

    drop table Category if exists" via JDBC Statement

at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67)

at org.hibernate.tool.schema.internal.SchemaDropperImpl.applySqlString(SchemaDropperImpl.java:375)

at org.hibernate.tool.schema.internal.SchemaDropperImpl.applySqlStrings(SchemaDropperImpl.java:359)

at org.hibernate.tool.schema.internal.SchemaDropperImpl.dropFromMetadata(SchemaDropperImpl.java:241)

at org.hibernate.tool.schema.internal.SchemaDropperImpl.performDrop(SchemaDropperImpl.java:154)

at org.hibernate.tool.schema.internal.SchemaDropperImpl.doDrop(SchemaDropperImpl.java:126)

at org.hibernate.tool.schema.internal.SchemaDropperImpl.doDrop(SchemaDropperImpl.java:112)

at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:144)

at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:72)

at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:310)

at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:467)

at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:939)

at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:56)

at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79)

at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)

at jpabook.JpaMain.main(JpaMain.java:10)

Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Cannot drop "CATEGORY" because "FKPIG62MG2IH4HQIRYCP0RFUBY3" depends on it; SQL statement:

 

    drop table Category if  [90107-210]

at org.h2.message.DbException.getJdbcSQLException(DbException.java:651)

at org.h2.message.DbException.getJdbcSQLException(DbException.java:496)

at org.h2.message.DbException.get(DbException.java:227)

at org.h2.command.ddl.DropTable.prepareDrop(DropTable.java:97)

at org.h2.command.ddl.DropTable.update(DropTable.java:121)

at org.h2.command.CommandContainer.update(CommandContainer.java:174)

at org.h2.command.Command.executeUpdate(Command.java:252)

at org.h2.server.TcpServerThread.process(TcpServerThread.java:408)

at org.h2.server.TcpServerThread.run(TcpServerThread.java:191)

at java.base/java.lang.Thread.run(Thread.java:834)

 

at org.h2.message.DbException.getJdbcSQLException(DbException.java:651)

at org.h2.engine.SessionRemote.readException(SessionRemote.java:637)

at org.h2.engine.SessionRemote.done(SessionRemote.java:606)

at org.h2.command.CommandRemote.executeUpdate(CommandRemote.java:227)

at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:252)

at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:223)

at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54)

... 15 more

 

2월 15, 2022 3:57:48 오후 org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleException

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

    drop table Delivery if exists" via JDBC Statement

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

    drop table Delivery if exists" via JDBC Statement

at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67)

at org.hibernate.tool.schema.internal.SchemaDropperImpl.applySqlString(SchemaDropperImpl.java:375)

at org.hibernate.tool.schema.internal.SchemaDropperImpl.applySqlStrings(SchemaDropperImpl.java:359)

at org.hibernate.tool.schema.internal.SchemaDropperImpl.dropFromMetadata(SchemaDropperImpl.java:241)

at org.hibernate.tool.schema.internal.SchemaDropperImpl.performDrop(SchemaDropperImpl.java:154)

at org.hibernate.tool.schema.internal.SchemaDropperImpl.doDrop(SchemaDropperImpl.java:126)

at org.hibernate.tool.schema.internal.SchemaDropperImpl.doDrop(SchemaDropperImpl.java:112)

at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:144)

at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:72)

at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:310)

at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:467)

at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:939)

at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:56)

at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79)

at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)

at jpabook.JpaMain.main(JpaMain.java:10)

Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Cannot drop "DELIVERY" because "FKQP0F0WCL9U3NIQYKUYM5MW22I" depends on it; SQL statement:

 

   중략...

Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "MEMBER" already exists; SQL statement:

 

    create table Member (

       member_id bigint not null,

        createdBy varchar(255),

        createdDateTime timestamp,

        lastModifiedBy varchar(255),

        lastModifiedDateTime timestamp,

        city varchar(255),

        street varchar(255),

        zipcode varchar(255),

        name varchar(255),

 [42101-210]

at org.h2.message.DbException.getJdbcSQLException(DbException.java:521)

at org.h2.message.DbException.getJdbcSQLException(DbException.java:496)

at org.h2.message.DbException.get(DbException.java:227)

at org.h2.message.DbException.get(DbException.java:203)

at org.h2.command.ddl.CreateTable.update(CreateTable.java:88)

at org.h2.command.CommandContainer.update(CommandContainer.java:174)

at org.h2.command.Command.executeUpdate(Command.java:252)

at org.h2.server.TcpServerThread.process(TcpServerThread.java:408)

at org.h2.server.TcpServerThread.run(TcpServerThread.java:191)

at java.base/java.lang.Thread.run(Thread.java:834)

 

at org.h2.message.DbException.getJdbcSQLException(DbException.java:521)

at org.h2.engine.SessionRemote.readException(SessionRemote.java:637)

at org.h2.engine.SessionRemote.done(SessionRemote.java:606)

at org.h2.command.CommandRemote.executeUpdate(CommandRemote.java:227)

at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:252)

at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:223)

at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54)

... 15 more

======

혹시 해결방법이 무엇인지...

 

cascade를 추가로 붙이면 삭제가 되던데 그렇게 할 수는 없을까요??

JPA java

답변 1

1

나무늘보

안녕하세요, 초코우유 님. 공식 서포터즈 codesweaver 입니다.

.
H2의 버전 문제일 수 있습니다.

아래의 링크를 참조하여 H2 버전을 바꿔보시기 바랍니다.

https://www.inflearn.com/questions/17219
.
감사합니다.

벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?

0

54

2

inheritance startegy 선택시 고려사항

0

35

1

Entity 동등성 비교

0

38

1

실무 조언 관련 질문입니다.

0

64

1

H2데이터베이스 파일 생성

0

76

2

서브쿼리 강의에서 ALL 예시 관련 질문드립니다.

0

66

2

수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?

0

62

1

JPQL 메소드와 락

0

62

1

Delivery @OneToOne

0

70

1

17강 4~5분대 테이블 값 조회가 안됩니다.

0

104

2

UnsupportedOperationException 발생

0

97

3

H2 Database 연결이 안됩니다.

0

101

2

연관관계 매핑 질문드립니다.

0

93

2

h2데이터베이스 실행오류

0

114

2

persistence.xml

0

119

2

양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?

0

87

1

영속성 컨텍스트

0

74

1

JPA 프록시

0

105

1

Native Query와 MyBatis

0

81

1

영속성 컨텍스트는 어떤 메모리에 저장되는건가요?

0

97

1

임베디드 타입 예시 코드 관련 질문

0

125

3

명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요

0

100

3

인텔리제이 패키지 커서 단축키 질문

0

112

2

혹시 현재는 ID 데이터 타입이 String이면 안되나요?

0

151

1