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

코린코린님의 프로필 이미지
코린코린

작성한 질문수

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

다대다 [N:M]

다대다 관계 풀어내는 과정에서 질문이 있습니다!

작성

·

1.4K

0

 

 

 

 

안녕하세요. 항상 좋은 답변 주셔서 감사합니다.

이번에 강의를 듣고 복습하는 과정에서 잘 안되는 부분이 있어 여쭤보고 싶어 글을 적습니다.

https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdw4Hii%2FbtqYkayGYd4%2FpRKCeoOUjuVOXvUu2xVTf1%2Fimg.png

이미지는 위를 참고 부탁드리며, MemberProduct 중간 Entity를 DB의 ORDER TABLE과 연결해서 쓰려고 합니다. 

@Entity
@Table(name = "order")
public class MemberProduct {

@Id @GeneratedValue
@Column(name = "ORDER_ID")
private Long id;

@ManyToOne
@JoinColumn(name = "MEMBER_ID")
private Member member;

@ManyToOne
@JoinColumn(name = "PRODUCT_ID")
private Product product;

private int orderAmount;
private LocalDate orderDate;

}

코드는 위와 같이 작성했습니다. 코드를 실행하면 create Table Order까지는 나가는 것이 확인이 되는데, 아래와 같은 warning이 발생되는 것을 확인했습니다. 그리고 실제 H2 DB에는 생성이 되지 않았습니다. Warning 메세지는 아래와 같습니다.

 

혹시 어떤 것이 문제점이 되는지 알려주실 수 있으실까요? 감사합니다! 

11월 27, 2021 9:23:00 오후 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection

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

11월 27, 2021 9:23:00 오후 org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleException

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

    drop table if exists order CASCADE " via JDBC Statement

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

    drop table if exists order CASCADE " 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:145)

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

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

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

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

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 JpaMain.main(JpaMain.java:17)

Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "

    DROP TABLE IF EXISTS ORDER[*] CASCADE "; expected "identifier"; SQL statement:

 

    drop table if exists order CASCADE  [42001-200]

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

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

at org.h2.message.DbException.getSyntaxError(DbException.java:243)

at org.h2.command.Parser.readColumnIdentifier(Parser.java:4976)

at org.h2.command.Parser.readIdentifierWithSchema(Parser.java:4925)

at org.h2.command.Parser.readIdentifierWithSchema(Parser.java:4954)

at org.h2.command.Parser.parseDrop(Parser.java:2236)

at org.h2.command.Parser.parsePrepared(Parser.java:916)

at org.h2.command.Parser.parse(Parser.java:843)

at org.h2.command.Parser.parse(Parser.java:815)

at org.h2.command.Parser.prepareCommand(Parser.java:738)

at org.h2.engine.Session.prepareLocal(Session.java:657)

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

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

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

 

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

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

at org.h2.command.CommandRemote.prepare(CommandRemote.java:85)

at org.h2.command.CommandRemote.<init>(CommandRemote.java:51)

at org.h2.engine.SessionRemote.prepareCommand(SessionRemote.java:481)

at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1235)

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

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

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

... 15 more

 

11월 27, 2021 9:23:00 오후 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection

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

Hibernate: 

    

    drop table if exists Product CASCADE 

Hibernate: 

    

    drop table if exists Team CASCADE 

Hibernate: 

    

    drop sequence if exists hibernate_sequence

Hibernate: create sequence hibernate_sequence start with 1 increment by 1

Hibernate: 

    

    create table Locker (

       id bigint not null,

        name varchar(255),

        primary key (id)

    )

Hibernate: 

    

    create table Member (

       MEMBER_ID bigint not null,

        username varchar(255),

        LOCKER_ID bigint,

        TEAM_ID bigint,

        primary key (MEMBER_ID)

    )

Hibernate: 

    

    create table order (

       ORDER_ID bigint not null,

        orderAmount integer not null,

        orderDate date,

        MEMBER_ID bigint,

        PRODUCT_ID bigint,

        primary key (ORDER_ID)

    )

Hibernate: 

    

    create table Product (

       PRODUCT_ID bigint not null,

        name varchar(255),

        primary key (PRODUCT_ID)

    )

Hibernate: 

    

    create table Team (

       TEAM_ID bigint not null,

        name varchar(255),

        primary key (TEAM_ID)

    )

11월 27, 2021 9:23:00 오후 org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleException

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

    create table order (

       ORDER_ID bigint not null,

        orderAmount integer not null,

        orderDate date,

        MEMBER_ID bigint,

        PRODUCT_ID bigint,

        primary key (ORDER_ID)

    )" via JDBC Statement

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

    create table order (

       ORDER_ID bigint not null,

        orderAmount integer not null,

        orderDate date,

        MEMBER_ID bigint,

        PRODUCT_ID bigint,

        primary key (ORDER_ID)

    )" via JDBC Statement

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

at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlString(SchemaCreatorImpl.java:439)

at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlStrings(SchemaCreatorImpl.java:423)

at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createFromMetadata(SchemaCreatorImpl.java:314)

at org.hibernate.tool.schema.internal.SchemaCreatorImpl.performCreation(SchemaCreatorImpl.java:166)

at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:135)

at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:121)

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

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

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

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

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

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 JpaMain.main(JpaMain.java:17)

Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "

    CREATE TABLE ORDER[*] (

       ORDER_ID BIGINT NOT NULL,

        ORDERAMOUNT INTEGER NOT NULL,

        ORDERDATE DATE,

        MEMBER_ID BIGINT,

        PRODUCT_ID BIGINT,

        PRIMARY KEY (ORDER_ID)

    )"; expected "identifier"; SQL statement:

 

    create table order (

       ORDER_ID bigint not null,

        orderAmount integer not null,

        orderDate date,

        MEMBER_ID bigint,

        PRODUCT_ID bigint,

        primary key (ORDER_ID)

    ) [42001-200]

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

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

at org.h2.message.DbException.getSyntaxError(DbException.java:243)

at org.h2.command.Parser.readColumnIdentifier(Parser.java:4976)

at org.h2.command.Parser.readIdentifierWithSchema(Parser.java:4925)

at org.h2.command.Parser.readIdentifierWithSchema(Parser.java:4954)

at org.h2.command.Parser.parseCreateTable(Parser.java:8361)

at org.h2.command.Parser.parseCreate(Parser.java:6276)

at org.h2.command.Parser.parsePrepared(Parser.java:903)

at org.h2.command.Parser.parse(Parser.java:843)

at org.h2.command.Parser.parse(Parser.java:815)

at org.h2.command.Parser.prepareCommand(Parser.java:738)

at org.h2.engine.Session.prepareLocal(Session.java:657)

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

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

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

 

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

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

at org.h2.command.CommandRemote.prepare(CommandRemote.java:85)

at org.h2.command.CommandRemote.<init>(CommandRemote.java:51)

at org.h2.engine.SessionRemote.prepareCommand(SessionRemote.java:481)

at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1235)

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

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

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

... 15 more

 

11월 27, 2021 9:23:00 오후 org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleException

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

    alter table order 

       add constraint FKv91a084hdabdukgr8npifvd6 

       foreign key (MEMBER_ID) 

       references Member" via JDBC Statement

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

    alter table order 

       add constraint FKv91a084hdabdukgr8npifvd6 

       foreign key (MEMBER_ID) 

       references Member" via JDBC Statement

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

at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlString(SchemaCreatorImpl.java:439)

at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlStrings(SchemaCreatorImpl.java:423)

at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createFromMetadata(SchemaCreatorImpl.java:374)

at org.hibernate.tool.schema.internal.SchemaCreatorImpl.performCreation(SchemaCreatorImpl.java:166)

at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:135)

at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:121)

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

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

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

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

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

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 JpaMain.main(JpaMain.java:17)

Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "

    ALTER TABLE ORDER[*] 

       ADD CONSTRAINT FKV91A084HDABDUKGR8NPIFVD6 

       FOREIGN KEY (MEMBER_ID) 

       REFERENCES MEMBER"; expected "identifier"; SQL statement:

 

    alter table order 

       add constraint FKv91a084hdabdukgr8npifvd6 

       foreign key (MEMBER_ID) 

       references Member [42001-200]

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

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

at org.h2.message.DbException.getSyntaxError(DbException.java:243)

at org.h2.command.Parser.readColumnIdentifier(Parser.java:4976)

at org.h2.command.Parser.readIdentifierWithSchema(Parser.java:4925)

at org.h2.command.Parser.readIdentifierWithSchema(Parser.java:4954)

at org.h2.command.Parser.parseAlterTable(Parser.java:7683)

at org.h2.command.Parser.parseAlter(Parser.java:6983)

at org.h2.command.Parser.parsePrepared(Parser.java:887)

at org.h2.command.Parser.parse(Parser.java:843)

at org.h2.command.Parser.parse(Parser.java:815)

at org.h2.command.Parser.prepareCommand(Parser.java:738)

at org.h2.engine.Session.prepareLocal(Session.java:657)

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

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

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

 

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

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

at org.h2.command.CommandRemote.prepare(CommandRemote.java:85)

at org.h2.command.CommandRemote.<init>(CommandRemote.java:51)

at org.h2.engine.SessionRemote.prepareCommand(SessionRemote.java:481)

at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1235)

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

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

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

... 15 more

 

11월 27, 2021 9:23:00 오후 org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleException

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

    alter table order 

       add constraint FKncvdoe9709o2ctr1jb71s6yrn 

       foreign key (PRODUCT_ID) 

       references Product" via JDBC Statement

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

    alter table order 

       add constraint FKncvdoe9709o2ctr1jb71s6yrn 

       foreign key (PRODUCT_ID) 

       references Product" via JDBC Statement

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

at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlString(SchemaCreatorImpl.java:439)

at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlStrings(SchemaCreatorImpl.java:423)

at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createFromMetadata(SchemaCreatorImpl.java:374)

at org.hibernate.tool.schema.internal.SchemaCreatorImpl.performCreation(SchemaCreatorImpl.java:166)

at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:135)

at org.hibernate.tool.schema.internal.SchemaCreatorImpl.doCreation(SchemaCreatorImpl.java:121)

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

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

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

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

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

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 JpaMain.main(JpaMain.java:17)

Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "

    ALTER TABLE ORDER[*] 

       ADD CONSTRAINT FKNCVDOE9709O2CTR1JB71S6YRN 

       FOREIGN KEY (PRODUCT_ID) 

       REFERENCES PRODUCT"; expected "identifier"; SQL statement:

 

    alter table order 

       add constraint FKncvdoe9709o2ctr1jb71s6yrn 

       foreign key (PRODUCT_ID) 

       references Product [42001-200]

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

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

at org.h2.message.DbException.getSyntaxError(DbException.java:243)

at org.h2.command.Parser.readColumnIdentifier(Parser.java:4976)

at org.h2.command.Parser.readIdentifierWithSchema(Parser.java:4925)

at org.h2.command.Parser.readIdentifierWithSchema(Parser.java:4954)

at org.h2.command.Parser.parseAlterTable(Parser.java:7683)

at org.h2.command.Parser.parseAlter(Parser.java:6983)

at org.h2.command.Parser.parsePrepared(Parser.java:887)

at org.h2.command.Parser.parse(Parser.java:843)

at org.h2.command.Parser.parse(Parser.java:815)

at org.h2.command.Parser.prepareCommand(Parser.java:738)

at org.h2.engine.Session.prepareLocal(Session.java:657)

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

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

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

 

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

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

at org.h2.command.CommandRemote.prepare(CommandRemote.java:85)

at org.h2.command.CommandRemote.<init>(CommandRemote.java:51)

at org.h2.engine.SessionRemote.prepareCommand(SessionRemote.java:481)

at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1235)

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

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

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

 

답변 2

0

저도 Order를 Orders로 고치니 해결됬습니다. 감사합니다!

0

코린코린님의 프로필 이미지
코린코린
질문자

자답합니다! 

테이블 명을 ORDER로 한 것이 문제였던 것 같습니다. ORDERS로 변경하니 문제가 없네요! 

김영한님의 프로필 이미지
김영한
지식공유자

스스로 잘 해결하셨습니다^^

코린코린님의 프로필 이미지
코린코린

작성한 질문수

질문하기