월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
영속성 컨텍스트와 Unique 제약 조건에 대해 질문 있습니다.
영한님의 JPA 서적/강의로 JPA를 학습하는 동시에 개인 프로젝트를 병행하여 JPA에 대한 연습을 하고 있습니다.Unique 제약 조건을 추가하는 과정에서 궁금증이 생겨 질문 드립니다. 영속성 컨텍스트는 그 자체로 Unique 제약 조건을 검증하지 않나요?chatGPT에게 질문을 했을 때의 '영속성 컨텍스트는 unique 제약 조건을 확인하지 않고 DB에 해당 역할을 위임한다; 라고 대답하였는데, 달리 검증할 방법을 모르겠어 이곳에 질문 드립니다.아래와 같은 상황을 방지하기 위해서는 데이터 저장 로직에 em.flush()를 함께 써 주는 것이 가장 바람직한 접근 방법일까요?영한님의 다른 답변을 참고하면 데이터 저장의 빈도수가 상대적으로 적기 때문에 em.flush()를 한번 더 호출하는 것이 큰 성능 저하를 가져오지 않을 것 같고, 문제 해결도 되는 것 같습니다만, 제가 놓치는 부분이 있을까 하여 질문 드립니다.테스트에 @Rollback(value=false)를 추가하면 데이터가 예상한 대로 실패하던데, 해당 어노테이션의 유무가 어떤 차이를 가지기에 결과가 달라지는건지 함께 여쭤봐도 될까요??강의 내용에 대한 질문보다는, 강의 내용에 기반을 둔 프로젝트 질문이라 여기에 질문을 드려도 되는지 모르겠습니다만, 혹여나 도움을 받을 수 있을까 하여 질문 드립니다. '영속성 컨텍스트의 동작 원리' 쯤 내용들은 관련 자료가 쉽게 찾아지지 않아 궁금증을 어떤 식으로 해결할 수 있을지 모르겠습니다 ㅠㅠ질문 이해를 돕고자 아래에 문제 상황도 함께 추가하여 질문 드립니다. 배경 설명질문 상황이 이해가 쉽도록 최대한 간단히 프로젝트 구성 설명 드립니다.유저의 데이터를 저장하는 DAO를 구현 중입니다. User 모델@Entity @Table(name = "USERS") @Getter @Setter @NoArgsConstructor public class User { @Id @GeneratedValue @Column(name = "IDX") private Long idx; @Column(name = "NAME") private String userName; @Column(name = "ID", unique = true) private String id; @Column(name = "PASSWORD") private String password; }유저의 ID가 중복되지 않도록 ID 컬럼에만 @Column( ... unique = true) 를 사용하였습니다. UserDAO@Repository public class UserDAO { @PersistenceContext private EntityManager em; public long save(User user){ em.persist(user); return user.getIdx(); } //... } 마지막으로, Unique 제약 조건을 확인하기 위한 테스트 코드 입니다.중복되는 ID 값을 가진 유저를 저장할 때 어떤 예외가 발생하는지 직접 확인하기 위해 실패하는 테스트 코드를 작성하였습니다. UserDAOTest @ExtendWith(SpringExtension.class) @SpringBootTest class DBUserDAOTest { @Autowired UserDAO userDAO; @Test @Transactional public void sameIdSaveTest(){ //given DBUser user1 = new DBUser("User1", "sameId", "PW1"); DBUser user2 = new DBUser("User2", "sameId", "PW2"); //when long savedIdx1 = userDAO.save(user1); long savedIdx2 = userDAO.save(user2); //that } 문제 상황동일한 ID 값인 "sameId"를 사용했음에도 문제가 없이 테스트가 통과하는 모습입니다. 로직 변경public long save(DBUser user){ em.persist(user); em.flush(); return user.getIdx(); }위와 같이 em.flush()를 추가하면 예상과 같이 테스트가 실패합니다.DataIntegrityViolationException이 발생합니다.
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
복합키 끼리의 매핑 질문 드립니다.
안녕하세요.현재 JPA강의를 통해 회사내 프로젝트중인 직장인 입니다.실무 중에 강의의 복합키 매핑과는 조금 다른 내용이 있어 며칠을 고민하다 문의 드립니다. 각각 복합키를 가진 두 개의 테이블이 있습니다.두 테이블은 code라는 공통 컬럼이있고 다대일관계로 매핑을 구성하려고 합니다.@EmbeddedId관계를 이용해 구성하려고 합니다.code 컬럼만 매핑시키는 방법을 찾지 못해 문의 남겨드립니다. 현재 문제의 테이블입니다.(회사프로젝트 테이블이라 자세히 올려드리는 못하는 점 양해 부탁드립니다.)Company Table은 code, biznumber 두 개의 pk로 구성돼 있습니다.Contract Table 역시 code, module 두 개의 pk로 구성돼 있습니다.저는 두 테이블에서 code라는 컬럼만 갖고 다대일 매핑을 구현하고 싶습니다.즉 복합키를 각각 가진 두 개의 테이블에서 각각 하나의 컬럼만을 이용해 다대일 매핑을 구현하고 싶습니다.제가 에러 내용과 과정을 올리고싶은데 회사코드라 올리면 문제가 생길까 싶어 이렇게 말로 표현드려 죄송합니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
H2 DB 관련, Table Drop이 안되서 문의 드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]h2 database 를 create 모드로 코드를 작성하고 있는데, 계속해서 Table이 이미 존재한다는 에러가 발생합니다.추가로 FK 때문에 Table을 drop 할 수 없다는 에러도 발생하네요.PK 오류도 발생하고요. 이 오류 들이 전부 테이블이 삭제가 안되고 계속 같은 id 값으로 테이블을 생성하려다 보니까 발생한 에러로 보이는데, 어떻게 해야 할까요? 참고 : h2 DB에서 drop all objects 로 테이블을 다 지우고 다시 실행하면 되긴 합니다만 그 이후에 다시 실행하면 같은 에러가 발생합니다. (h2 DB는 2.2.222를 사용 중 -> version 1.x.xxx는 현재 다운로드 불가로 보임) <오류 내용>"C:\Program Files\Java\jdk-17\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.1.1\lib\idea_rt.jar=48489:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.1.1\bin" -Dfile.encoding=UTF-8 -classpath C:\kim_spring\JPA-Basic\hellojpql\target\classes;C:\Users\user\.m2\repository\org\hibernate\hibernate-entitymanager\5.3.10.Final\hibernate-entitymanager-5.3.10.Final.jar;C:\Users\user\.m2\repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;C:\Users\user\.m2\repository\org\hibernate\hibernate-core\5.3.10.Final\hibernate-core-5.3.10.Final.jar;C:\Users\user\.m2\repository\org\javassist\javassist\3.23.2-GA\javassist-3.23.2-GA.jar;C:\Users\user\.m2\repository\antlr\antlr\2.7.7\antlr-2.7.7.jar;C:\Users\user\.m2\repository\org\jboss\jandex\2.0.5.Final\jandex-2.0.5.Final.jar;C:\Users\user\.m2\repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;C:\Users\user\.m2\repository\org\dom4j\dom4j\2.1.1\dom4j-2.1.1.jar;C:\Users\user\.m2\repository\org\hibernate\common\hibernate-commons-annotations\5.0.4.Final\hibernate-commons-annotations-5.0.4.Final.jar;C:\Users\user\.m2\repository\javax\persistence\javax.persistence-api\2.2\javax.persistence-api-2.2.jar;C:\Users\user\.m2\repository\net\bytebuddy\byte-buddy\1.9.5\byte-buddy-1.9.5.jar;C:\Users\user\.m2\repository\org\jboss\spec\javax\transaction\jboss-transaction-api_1.2_spec\1.1.1.Final\jboss-transaction-api_1.2_spec-1.1.1.Final.jar;C:\Users\user\.m2\repository\com\h2database\h2\2.2.222\h2-2.2.222.jar;C:\Users\user\.m2\repository\javax\xml\bind\jaxb-api\2.3.1\jaxb-api-2.3.1.jar;C:\Users\user\.m2\repository\javax\activation\javax.activation-api\1.2.0\javax.activation-api-1.2.0.jar jpql.JpaMain9월 20, 2023 11:43:07 오후 org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformationINFO: HHH000204: Processing PersistenceUnitInfo [ name: hello ...]9월 20, 2023 11:43:07 오후 org.hibernate.Version logVersionINFO: HHH000412: Hibernate Core {5.3.10.Final}9월 20, 2023 11:43:07 오후 org.hibernate.cfg.Environment <clinit>INFO: HHH000206: hibernate.properties not found9월 20, 2023 11:43:07 오후 org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>INFO: HCANN000001: Hibernate Commons Annotations {5.0.4.Final}9월 20, 2023 11:43:07 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configureWARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)9월 20, 2023 11:43:07 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreatorINFO: HHH10001005: using driver [org.h2.Driver] at URL [jdbc:h2:tcp://localhost/~/test]9월 20, 2023 11:43:07 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreatorINFO: HHH10001001: Connection properties: {user=sa}9월 20, 2023 11:43:07 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreatorINFO: HHH10001003: Autocommit mode: false9월 20, 2023 11:43:07 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>INFO: HHH000115: Hibernate connection pool size: 20 (min=1)9월 20, 2023 11:43:07 오후 org.hibernate.dialect.Dialect <init>INFO: HHH000400: Using dialect: org.hibernate.dialect.H2DialectHibernate: drop table Member if existsHibernate: drop table ORDERS if existsHibernate: drop table Product if existsHibernate: drop table Team if existsHibernate: drop sequence if exists hibernate_sequenceHibernate: create sequence hibernate_sequence start with 1 increment by 1Hibernate: create table Member ( id bigint not null, age integer not null, username varchar(255), TEAM_ID bigint, primary key (id) )Hibernate: create table ORDERS ( id bigint not null, city varchar(255), street varchar(255), zipcode varchar(255), orderAmount varchar(255), MEMBER_ID bigint, PRODUCT_ID bigint, primary key (id) )Hibernate: create table Product ( id bigint not null, name varchar(255), price integer not null, stockAmount integer not null, primary key (id) )Hibernate: create table Team ( id bigint not null, age integer not null, username varchar(255), primary key (id) )Hibernate: alter table Member add constraint FKl7wsny760hjy6x19kqnduasbm foreign key (TEAM_ID) references TeamHibernate: alter table ORDERS add constraint FKh0db7kqr88ed8hqtcqw3jkcia foreign key (MEMBER_ID) references MemberHibernate: alter table ORDERS add constraint FKtlx3qxs8vwir2b80i3oumx2qm foreign key (PRODUCT_ID) references Product9월 20, 2023 11:43:08 오후 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnectionINFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@76ddd61a] 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.9월 20, 2023 11:43:08 오후 org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleExceptionWARN: GenerationTarget encountered exception accepting command : Error executing DDL " drop table Member if exists" via JDBC Statementorg.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL " drop table Member 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 jpql.JpaMain.main(JpaMain.java:9)Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Cannot drop "MEMBER" because "FKH0DB7KQR88ED8HQTCQW3JKCIA" depends on it; SQL statement: drop table Member if [90107-222] at org.h2.message.DbException.getJdbcSQLException(DbException.java:644) at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) at org.h2.message.DbException.get(DbException.java:223) at org.h2.command.ddl.DropTable.prepareDrop(DropTable.java:108) at org.h2.command.ddl.DropTable.update(DropTable.java:133) at org.h2.command.CommandContainer.update(CommandContainer.java:169) at org.h2.command.Command.executeUpdate(Command.java:256) at org.h2.server.TcpServerThread.process(TcpServerThread.java:413) at org.h2.server.TcpServerThread.run(TcpServerThread.java:191) at java.base/java.lang.Thread.run(Thread.java:833) at org.h2.message.DbException.getJdbcSQLException(DbException.java:644) at org.h2.engine.SessionRemote.readException(SessionRemote.java:650) at org.h2.engine.SessionRemote.done(SessionRemote.java:619) at org.h2.command.CommandRemote.executeUpdate(CommandRemote.java:237) at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:262) at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:231) at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54) ... 15 more9월 20, 2023 11:43:08 오후 org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleExceptionWARN: GenerationTarget encountered exception accepting command : Error executing DDL " drop table Team if exists" via JDBC Statementorg.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL " drop table Team 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 jpql.JpaMain.main(JpaMain.java:9)Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Cannot drop "TEAM" because "FKL7WSNY760HJY6X19KQNDUASBM" depends on it; SQL statement: drop table Team if [90107-222] at org.h2.message.DbException.getJdbcSQLException(DbException.java:644) at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) at org.h2.message.DbException.get(DbException.java:223) at org.h2.command.ddl.DropTable.prepareDrop(DropTable.java:108) at org.h2.command.ddl.DropTable.update(DropTable.java:133) at org.h2.command.CommandContainer.update(CommandContainer.java:169) at org.h2.command.Command.executeUpdate(Command.java:256) at org.h2.server.TcpServerThread.process(TcpServerThread.java:413) at org.h2.server.TcpServerThread.run(TcpServerThread.java:191) at java.base/java.lang.Thread.run(Thread.java:833) at org.h2.message.DbException.getJdbcSQLException(DbException.java:644) at org.h2.engine.SessionRemote.readException(SessionRemote.java:650) at org.h2.engine.SessionRemote.done(SessionRemote.java:619) at org.h2.command.CommandRemote.executeUpdate(CommandRemote.java:237) at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:262) at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:231) at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54) ... 15 more9월 20, 2023 11:43:08 오후 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnectionINFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@4422dd48] 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.9월 20, 2023 11:43:08 오후 org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleExceptionWARN: GenerationTarget encountered exception accepting command : Error executing DDL " create table Member ( id bigint not null, age integer not null, username varchar(255), TEAM_ID bigint, primary key (id) )" via JDBC Statementorg.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL " create table Member ( id bigint not null, age integer not null, username varchar(255), TEAM_ID bigint, primary key (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:440) at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlStrings(SchemaCreatorImpl.java:424) at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createFromMetadata(SchemaCreatorImpl.java:315) 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:155) 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 jpql.JpaMain.main(JpaMain.java:9)Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "MEMBER" already exists; SQL statement: create table Member ( id bigint not null, age integer not null, username varchar(255), TEAM_ID bigint, [42101-222] at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) at org.h2.message.DbException.get(DbException.java:223) at org.h2.message.DbException.get(DbException.java:199) at org.h2.command.ddl.CreateTable.update(CreateTable.java:91) at org.h2.command.CommandContainer.update(CommandContainer.java:169) at org.h2.command.Command.executeUpdate(Command.java:256) at org.h2.server.TcpServerThread.process(TcpServerThread.java:413) at org.h2.server.TcpServerThread.run(TcpServerThread.java:191) at java.base/java.lang.Thread.run(Thread.java:833) at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) at org.h2.engine.SessionRemote.readException(SessionRemote.java:650) at org.h2.engine.SessionRemote.done(SessionRemote.java:619) at org.h2.command.CommandRemote.executeUpdate(CommandRemote.java:237) at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:262) at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:231) at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54) ... 15 more9월 20, 2023 11:43:08 오후 org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleExceptionWARN: GenerationTarget encountered exception accepting command : Error executing DDL " create table Team ( id bigint not null, age integer not null, username varchar(255), primary key (id) )" via JDBC Statementorg.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL " create table Team ( id bigint not null, age integer not null, username varchar(255), primary key (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:440) at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlStrings(SchemaCreatorImpl.java:424) at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createFromMetadata(SchemaCreatorImpl.java:315) 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:155) 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 jpql.JpaMain.main(JpaMain.java:9)Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "TEAM" already exists; SQL statement: create table Team ( id bigint not null, age integer not null, username varchar(255), [42101-222] at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) at org.h2.message.DbException.get(DbException.java:223) at org.h2.message.DbException.get(DbException.java:199) at org.h2.command.ddl.CreateTable.update(CreateTable.java:91) at org.h2.command.CommandContainer.update(CommandContainer.java:169) at org.h2.command.Command.executeUpdate(Command.java:256) at org.h2.server.TcpServerThread.process(TcpServerThread.java:413) at org.h2.server.TcpServerThread.run(TcpServerThread.java:191) at java.base/java.lang.Thread.run(Thread.java:833) at org.h2.message.DbException.getJdbcSQLException(DbException.java:514) at org.h2.engine.SessionRemote.readException(SessionRemote.java:650) at org.h2.engine.SessionRemote.done(SessionRemote.java:619) at org.h2.command.CommandRemote.executeUpdate(CommandRemote.java:237) at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:262) at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:231) at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54) ... 15 more9월 20, 2023 11:43:08 오후 org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleExceptionWARN: GenerationTarget encountered exception accepting command : Error executing DDL " alter table Member add constraint FKl7wsny760hjy6x19kqnduasbm foreign key (TEAM_ID) references Team" via JDBC Statementorg.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL " alter table Member add constraint FKl7wsny760hjy6x19kqnduasbm foreign key (TEAM_ID) references Team" 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:440) at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlStrings(SchemaCreatorImpl.java:424) at org.hibernate.tool.schema.internal.SchemaCreatorImpl.createFromMetadata(SchemaCreatorImpl.java:375) 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:155) 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 jpql.JpaMain.main(JpaMain.java:9)Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Constraint "FKL7WSNY760HJY6X19KQNDUASBM" already exists; SQL statement: alter table Member add constraint FKl7wsny760hjy6x19kqnduasbm foreign key (TEAM_ID) reference [90045-222] at org.h2.message.DbException.getJdbcSQLException(DbException.java:644) at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) at org.h2.message.DbException.get(DbException.java:223) at org.h2.message.DbException.get(DbException.java:199) at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:111) at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:74) at org.h2.command.ddl.AlterTable.update(AlterTable.java:46) at org.h2.command.CommandContainer.update(CommandContainer.java:169) at org.h2.command.Command.executeUpdate(Command.java:256) at org.h2.server.TcpServerThread.process(TcpServerThread.java:413) at org.h2.server.TcpServerThread.run(TcpServerThread.java:191) at java.base/java.lang.Thread.run(Thread.java:833) at org.h2.message.DbException.getJdbcSQLException(DbException.java:644) at org.h2.engine.SessionRemote.readException(SessionRemote.java:650) at org.h2.engine.SessionRemote.done(SessionRemote.java:619) at org.h2.command.CommandRemote.executeUpdate(CommandRemote.java:237) at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:262) at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:231) at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54) ... 15 more9월 20, 2023 11:43:08 오후 org.hibernate.tool.schema.internal.SchemaCreatorImpl applyImportSourcesINFO: HHH000476: Executing import script 'org.hibernate.tool.schema.internal.exec.ScriptSourceInputNonExistentImpl@6c518474'Hibernate: call next value for hibernate_sequenceHibernate: call next value for hibernate_sequenceHibernate: /* insert jpql.Team */ insert into Team (age, username, id) values (?, ?, ?)9월 20, 2023 11:43:08 오후 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptionsWARN: SQL Error: 23505, SQLState: 235059월 20, 2023 11:43:08 오후 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptionsERROR: Unique index or primary key violation: "PRIMARY KEY ON PUBLIC.TEAM(ID) ( /* key:1 */ CAST(1 AS BIGINT), 0, 'teamA')"; SQL statement:/* insert jpql.Team */ insert into Team (age, usernam [23505-222]javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not execute statement at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154) at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181) at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:188) at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1460) at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1440) at jpql.JpaMain.main(JpaMain.java:30)Caused by: org.hibernate.exception.ConstraintViolationException: could not execute statement at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:59) at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99) at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:178) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3176) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3690) at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:90) at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:604) at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:478) at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:356) at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:39) at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1454) ... 2 moreCaused by: org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: Unique index or primary key violation: "PRIMARY KEY ON PUBLIC.TEAM(ID) ( /* key:1 */ CAST(1 AS BIGINT), 0, 'teamA')"; SQL statement:/* insert jpql.Team */ insert into Team (age, usernam [23505-222] at org.h2.message.DbException.getJdbcSQLException(DbException.java:520) at org.h2.message.DbException.getJdbcSQLException(DbException.java:489) at org.h2.message.DbException.get(DbException.java:223) at org.h2.message.DbException.get(DbException.java:199) at org.h2.mvstore.db.MVPrimaryIndex.add(MVPrimaryIndex.java:120) at org.h2.mvstore.db.MVTable.addRow(MVTable.java:519) at org.h2.command.dml.Insert.insertRows(Insert.java:174) at org.h2.command.dml.Insert.update(Insert.java:135) at org.h2.command.dml.DataChangeStatement.update(DataChangeStatement.java:74) at org.h2.command.CommandContainer.update(CommandContainer.java:169) at org.h2.command.Command.executeUpdate(Command.java:256) at org.h2.server.TcpServerThread.process(TcpServerThread.java:413) at org.h2.server.TcpServerThread.run(TcpServerThread.java:191) at java.base/java.lang.Thread.run(Thread.java:833) at org.h2.message.DbException.getJdbcSQLException(DbException.java:520) at org.h2.engine.SessionRemote.readException(SessionRemote.java:650) at org.h2.engine.SessionRemote.done(SessionRemote.java:619) at org.h2.command.CommandRemote.executeUpdate(CommandRemote.java:237) at org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:216) at org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:174) at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:175) ... 10 more9월 20, 2023 11:43:08 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl stopINFO: HHH10001008: Cleaning up connection pool [jdbc:h2:tcp://localhost/~/test]종료 코드 0(으)로 완료된 프로세스 <persistence.xml><?xml version="1.0" encoding="UTF-8"?><persistence version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"> <persistence-unit name="hello"> <properties> <!-- 필수 속성 --> <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/> <property name="javax.persistence.jdbc.user" value="sa"/> <property name="javax.persistence.jdbc.password" value=""/> <property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/test"/> <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/> <!-- 옵션 --> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.format_sql" value="true"/> <property name="hibernate.use_sql_comments" value="true"/> <!-- <property name="hibernate.jdbc.batch_size" value="10"/>--> <property name="hibernate.hbm2ddl.auto" value="create" /> </properties> </persistence-unit></persistence>
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
엔티티 매핑 관련 질문
안녕하세요. 일대다 매핑에서 엔티티 매핑관련 질문드립니다. 현재 디비 테이블 팀테이블과 멤버테이블의 칼럼은 각각Team_id, nameMember_id, name, team_id로 형성되어 있습니다. 보통 디비 테이블의 칼럼 형성은 엔티티매핑으로 합니다. 그런데 여기서는 멤버테이블에서 team_id라는 필드를 선언해준 적이 없는데도 불구하고 디비에서 보면 칼럼이 형성되어 있네요. 이건 JPA가 일대다 매핑일 경우, 즉 @OneToMany@JoinColumn이 있을 경우 '다'인 테이블에 자동으로 필드를 만들고 쿼리를 보내서 칼럼을 만들어 내는 건가요?
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
프록시 11분 10초
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요강의 11분 11초 30라인에서member.getId()를 할 때, 하이버네이트에서 select를 안하는 이유는비록 26라인에서 em.clear()를 통해 영속컨택스트를 비웠지만member.getId()에 사용하는 시퀀스값을, 23라인 em.persist(member) 시점에서 미리 가져왔기 때문인가요?그렇다면 이 시퀀스값은 어디에 저장되어 있는 건가요?em.clear()를 통해 영속컨택스트가 비워져서, 시퀀스값도 지워졌을 거라고 생각했습니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
ex1-hello-jpa 프로젝트 소스 코드 공유 문의
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]해당 강의의 ex1-hello-jpa 프로젝트 소스 코드가 다 날라갔는데, 혹시 github이나 다른 공유 사이트에서 소스 코드를 받아 볼 수 있을까요?
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
양방향 연관관계와 연관관계의 주인 2 - 주의점, 정리 14분 43초 changeTeam 메서드 질문드립니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요.질문1. 안녕하세요 좋은 강의를 만들어주셔서 감사합니다.질문이 있습니다.14분 40초에서 public void changeTeam(Team team) { this.team = team; team.getMembers().add(this); }멤버가 다른 팀으로 변경했을 때 다른 팀의 멤버로 추가되는 로직은 있는데, 기존 팀에서 삭제하는 로직은 없는 것 같았습니다그래서 아래처럼 코드를 고쳐도 되는지 질문드리고 싶습니다.public void changeTeam(Team team) { this.getTeam().getMembers().remove(this); this.team = team; team.getMembers().add(this); }질문2.그리고, 만약 this.getTeam().getMembers().remove(this);로직을 넣지 않아서여러개의 팀 객체의 멤버 리스트에 동일한 멤버가 들어가면DB에는 어떻게 insert 되는지도 궁금합니다.즉, 타이거스팀 객체의 멤버 리스트와, 이글스팀 객체의 멤버 리스트에 김지수라는 동일한 멤버 객체가 등록된 상태인데타이거스팀과 이글스팀 2개의 객체를 persist한 상황입니다.어차피 DB에 반영은주인인 member 객체를 기준으로 하기에 걱정하지 않아도 되는 부분인가요?즉, 김지수 member의 멤버변수 팀을 기준으로 DB에 반영되는 건가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
No Persistence Provider for EntityManager 에러
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요. 구글링과 커뮤니티를 모두 돌았고, 자바 버전을 17 -> 8 -> 11로 왔는데 계속해서 에러가 생겨서 여기 업로드 해봅니다.. Maven으로 하다가 안되길래 gradle로 바꿔서 하는중인데 다른 에러에서 또 막혀버렸네요..ㅠㅠ
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
궁급합니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 궁금한게잇습니다!다대일 관계에서 다에 persist해주면 일도 저장되어 다에만 저장을햇는데 연관관계수업일때 그래서 일대다는 추천을 안하신다고핫는데 cascade을이용하여 일을저장할때 다를 저장하는 경우는 어느상황일때하는건가요??
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
antlr.NoViableAltException: unexpected token: Member
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.antlr.NoViableAltException: unexpected token: Member문제가 생기는데, 몇시간동안 고민해봐도 도대체 뭐가 문제인지 모르겠어서 봐주시면 감사하겠습니다JpaMain.javaimport javax.persistence.*; import java.util.List; public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); /* try { Member member = new Member(); member.setId(3L); member.setName("HelloC"); //em.persist(member);//저장 끝 Member findMember = em.find(Member.class, 1L); findMember.setName("HelloJPA"); //이렇게만 해도 DB에서도 수정 반영 //왜냐하면 find를 통해 가져오면 JPA가 관리해주기 때문 Member findMember2 = em.find(Member.class, 5L); em.remove(findMember2); tx.commit(); }catch (Exception e){ tx.rollback(); }finally { em.close(); } */ try{ List<Member> result = em.createQuery("SELECT m FROM Member AS m", Member.class) .getResultList(); for (Member member : result){ System.out.println("member.name = "+member.getName()); } tx.commit(); }catch (Exception e){ tx.rollback(); }finally { em.close(); } emf.close(); } } Member.javaimport javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; //@Entity 어노테이션은 JPA가 VO를 인식하게 해준다. @Entity @Table(name = "MEMBER")//여기서 name은 DB 테이블의 이름 public class Member { //JPA에게 기본키라고 알려준다. @Id private Long id; @Column(name="name") private String name; //Getter, Setter … public String getName() { return name; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public void setName(String name) { this.name = name; } }persistence.xml<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"> <persistence-unit name="hello"> <properties> <!-- 필수 속성 --> <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/> <property name="javax.persistence.jdbc.user" value="sa"/> <property name="javax.persistence.jdbc.password" value=""/> <property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/test"/> <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/> <!-- 옵션 --> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.format_sql" value="true"/> <property name="hibernate.use_sql_comments" value="true"/> <!--<property name="hibernate.hbm2ddl.auto" value="create" />--> </properties> </persistence-unit> </persistence> pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>jpa-basic</groupId> <artifactId>ex1-hello-jpa</artifactId> <version>1.0.0</version> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>8</source> <target>8</target> </configuration> </plugin> </plugins> </build> <dependencies> <!-- JPA 하이버네이트 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.4.29.Final</version> </dependency> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency> <!-- H2 데이터베이스 --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.4.200</version> </dependency> <!-- logback --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> </dependencies> </project> 오류 메세지C:\Users\zzaaq\.jdks\corretto-1.8.0_382\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.3.2\lib\idea_rt.jar=57341:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.3.2\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\charsets.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\ext\access-bridge-64.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\ext\cldrdata.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\ext\dnsns.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\ext\jaccess.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\ext\jfxrt.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\ext\localedata.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\ext\nashorn.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\ext\sunec.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\ext\sunjce_provider.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\ext\sunmscapi.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\ext\sunpkcs11.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\ext\zipfs.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\jce.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\jfr.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\jfxswt.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\jsse.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\management-agent.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\resources.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\rt.jar;C:\study-kimyounghan\ex1-hello-jpa\target\classes;C:\Users\zzaaq\.m2\repository\org\hibernate\hibernate-core\5.4.29.Final\hibernate-core-5.4.29.Final.jar;C:\Users\zzaaq\.m2\repository\org\jboss\logging\jboss-logging\3.4.1.Final\jboss-logging-3.4.1.Final.jar;C:\Users\zzaaq\.m2\repository\javax\persistence\javax.persistence-api\2.2\javax.persistence-api-2.2.jar;C:\Users\zzaaq\.m2\repository\org\javassist\javassist\3.27.0-GA\javassist-3.27.0-GA.jar;C:\Users\zzaaq\.m2\repository\net\bytebuddy\byte-buddy\1.10.21\byte-buddy-1.10.21.jar;C:\Users\zzaaq\.m2\repository\antlr\antlr\2.7.7\antlr-2.7.7.jar;C:\Users\zzaaq\.m2\repository\org\jboss\spec\javax\transaction\jboss-transaction-api_1.2_spec\1.1.1.Final\jboss-transaction-api_1.2_spec-1.1.1.Final.jar;C:\Users\zzaaq\.m2\repository\org\jboss\jandex\2.2.3.Final\jandex-2.2.3.Final.jar;C:\Users\zzaaq\.m2\repository\com\fasterxml\classmate\1.5.1\classmate-1.5.1.jar;C:\Users\zzaaq\.m2\repository\javax\activation\javax.activation-api\1.2.0\javax.activation-api-1.2.0.jar;C:\Users\zzaaq\.m2\repository\org\dom4j\dom4j\2.1.3\dom4j-2.1.3.jar;C:\Users\zzaaq\.m2\repository\org\hibernate\common\hibernate-commons-annotations\5.1.2.Final\hibernate-commons-annotations-5.1.2.Final.jar;C:\Users\zzaaq\.m2\repository\org\glassfish\jaxb\jaxb-runtime\2.3.1\jaxb-runtime-2.3.1.jar;C:\Users\zzaaq\.m2\repository\org\glassfish\jaxb\txw2\2.3.1\txw2-2.3.1.jar;C:\Users\zzaaq\.m2\repository\com\sun\istack\istack-commons-runtime\3.0.7\istack-commons-runtime-3.0.7.jar;C:\Users\zzaaq\.m2\repository\org\jvnet\staxex\stax-ex\1.8\stax-ex-1.8.jar;C:\Users\zzaaq\.m2\repository\com\sun\xml\fastinfoset\FastInfoset\1.2.15\FastInfoset-1.2.15.jar;C:\Users\zzaaq\.m2\repository\javax\xml\bind\jaxb-api\2.3.1\jaxb-api-2.3.1.jar;C:\Users\zzaaq\.m2\repository\com\h2database\h2\1.4.200\h2-1.4.200.jar;C:\Users\zzaaq\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\zzaaq\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\zzaaq\.m2\repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar JpaMain 20:07:18.660 [main] DEBUG org.jboss.logging - Logging Provider: org.jboss.logging.Slf4jLoggerProvider 20:07:18.742 [main] DEBUG org.hibernate.jpa.HibernatePersistenceProvider - Located and parsed 1 persistence units; checking each 20:07:18.742 [main] DEBUG org.hibernate.jpa.HibernatePersistenceProvider - Checking persistence-unit [name=hello, explicit-provider=null] against incoming persistence unit name [hello] 20:07:18.742 [main] DEBUG org.hibernate.jpa.boot.spi.ProviderChecker - No PersistenceProvider explicitly requested, assuming Hibernate 20:07:18.747 [main] DEBUG org.hibernate.jpa.internal.util.LogHelper - PersistenceUnitInfo [ name: hello persistence provider classname: null classloader: null excludeUnlistedClasses: false JTA datasource: null Non JTA datasource: null Transaction type: RESOURCE_LOCAL PU root URL: file:/C:/study-kimyounghan/ex1-hello-jpa/target/classes/ Shared Cache Mode: null Validation Mode: null Jar files URLs [] Managed classes names [] Mapping files names [] Properties [ javax.persistence.jdbc.driver: org.h2.Driver javax.persistence.jdbc.password: javax.persistence.jdbc.url: jdbc:h2:tcp://localhost/~/test hibernate.dialect: org.hibernate.dialect.H2Dialect hibernate.show_sql: true hibernate.format_sql: true javax.persistence.jdbc.user: sa hibernate.use_sql_comments: true] 20:07:18.751 [main] DEBUG org.hibernate.integrator.internal.IntegratorServiceImpl - Adding Integrator [org.hibernate.cfg.beanvalidation.BeanValidationIntegrator]. 20:07:18.752 [main] DEBUG org.hibernate.integrator.internal.IntegratorServiceImpl - Adding Integrator [org.hibernate.secure.spi.JaccIntegrator]. 20:07:18.757 [main] DEBUG org.hibernate.integrator.internal.IntegratorServiceImpl - Adding Integrator [org.hibernate.cache.internal.CollectionCacheInvalidator]. 20:07:18.816 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 5.4.29.Final 20:07:18.817 [main] DEBUG org.hibernate.cfg.Environment - HHH000206: hibernate.properties not found 20:07:18.940 [main] DEBUG org.hibernate.service.spi.ServiceBinding - Overriding existing service binding [org.hibernate.secure.spi.JaccService] 20:07:18.948 [main] DEBUG org.hibernate.cache.internal.RegionFactoryInitiator - Cannot default RegionFactory based on registered strategies as `[]` RegionFactory strategies were registered 20:07:18.949 [main] DEBUG org.hibernate.cache.internal.RegionFactoryInitiator - Cache region factory : org.hibernate.cache.internal.NoCachingRegionFactory 20:07:18.964 [main] INFO org.hibernate.annotations.common.Version - HCANN000001: Hibernate Commons Annotations {5.1.2.Final} 20:07:19.720 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BooleanType@3eb7fc54 20:07:19.720 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BooleanType@3eb7fc54 20:07:19.721 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Boolean -> org.hibernate.type.BooleanType@3eb7fc54 20:07:19.721 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration numeric_boolean -> org.hibernate.type.NumericBooleanType@47d90b9e 20:07:19.721 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration true_false -> org.hibernate.type.TrueFalseType@149e0f5d 20:07:19.722 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration yes_no -> org.hibernate.type.YesNoType@6af93788 20:07:19.722 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.ByteType@1c93084c 20:07:19.722 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.ByteType@1c93084c 20:07:19.722 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Byte -> org.hibernate.type.ByteType@1c93084c 20:07:19.723 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration character -> org.hibernate.type.CharacterType@5223e5ee 20:07:19.723 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration char -> org.hibernate.type.CharacterType@5223e5ee 20:07:19.723 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Character -> org.hibernate.type.CharacterType@5223e5ee 20:07:19.724 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.ShortType@1d119efb 20:07:19.724 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.ShortType@1d119efb 20:07:19.724 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Short -> org.hibernate.type.ShortType@1d119efb 20:07:19.725 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration integer -> org.hibernate.type.IntegerType@49b0b76 20:07:19.725 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration int -> org.hibernate.type.IntegerType@49b0b76 20:07:19.725 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Integer -> org.hibernate.type.IntegerType@49b0b76 20:07:19.727 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.LongType@be64738 20:07:19.727 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.LongType@be64738 20:07:19.727 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Long -> org.hibernate.type.LongType@be64738 20:07:19.728 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.FloatType@4b5d6a01 20:07:19.728 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.FloatType@4b5d6a01 20:07:19.728 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Float -> org.hibernate.type.FloatType@4b5d6a01 20:07:19.729 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.DoubleType@3c130745 20:07:19.729 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.DoubleType@3c130745 20:07:19.729 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Double -> org.hibernate.type.DoubleType@3c130745 20:07:19.730 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration big_decimal -> org.hibernate.type.BigDecimalType@703580bf 20:07:19.730 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigDecimal -> org.hibernate.type.BigDecimalType@703580bf 20:07:19.731 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration big_integer -> org.hibernate.type.BigIntegerType@70e8f8e 20:07:19.731 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigInteger -> org.hibernate.type.BigIntegerType@70e8f8e 20:07:19.732 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration string -> org.hibernate.type.StringType@6e4784bc 20:07:19.732 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.String -> org.hibernate.type.StringType@6e4784bc 20:07:19.733 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration nstring -> org.hibernate.type.StringNVarcharType@4b0b0854 20:07:19.733 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration ncharacter -> org.hibernate.type.CharacterNCharType@353d0772 20:07:19.733 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration url -> org.hibernate.type.UrlType@13e39c73 20:07:19.733 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.net.URL -> org.hibernate.type.UrlType@13e39c73 20:07:19.734 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> org.hibernate.type.DurationType@6580cfdd 20:07:19.734 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> org.hibernate.type.DurationType@6580cfdd 20:07:19.745 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration Instant -> org.hibernate.type.InstantType@41e36e46 20:07:19.745 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Instant -> org.hibernate.type.InstantType@41e36e46 20:07:19.746 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration LocalDateTime -> org.hibernate.type.LocalDateTimeType@2145b572 20:07:19.746 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDateTime -> org.hibernate.type.LocalDateTimeType@2145b572 20:07:19.747 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration LocalDate -> org.hibernate.type.LocalDateType@1cbbffcd 20:07:19.747 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDate -> org.hibernate.type.LocalDateType@1cbbffcd 20:07:19.748 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration LocalTime -> org.hibernate.type.LocalTimeType@28eaa59a 20:07:19.748 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalTime -> org.hibernate.type.LocalTimeType@28eaa59a 20:07:19.748 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> org.hibernate.type.OffsetDateTimeType@35ef1869 20:07:19.748 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> org.hibernate.type.OffsetDateTimeType@35ef1869 20:07:19.749 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> org.hibernate.type.OffsetTimeType@708f5957 20:07:19.749 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> org.hibernate.type.OffsetTimeType@708f5957 20:07:19.751 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> org.hibernate.type.ZonedDateTimeType@7714e963 20:07:19.752 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> org.hibernate.type.ZonedDateTimeType@7714e963 20:07:19.753 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration date -> org.hibernate.type.DateType@192d43ce 20:07:19.753 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Date -> org.hibernate.type.DateType@192d43ce 20:07:19.753 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration time -> org.hibernate.type.TimeType@43195e57 20:07:19.753 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Time -> org.hibernate.type.TimeType@43195e57 20:07:19.754 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration timestamp -> org.hibernate.type.TimestampType@6e171cd7 20:07:19.754 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Timestamp -> org.hibernate.type.TimestampType@6e171cd7 20:07:19.754 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Date -> org.hibernate.type.TimestampType@6e171cd7 20:07:19.755 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration dbtimestamp -> org.hibernate.type.DbTimestampType@59fd97a8 20:07:19.756 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration calendar -> org.hibernate.type.CalendarType@61862a7f 20:07:19.756 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Calendar -> org.hibernate.type.CalendarType@61862a7f 20:07:19.756 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.util.GregorianCalendar -> org.hibernate.type.CalendarType@61862a7f 20:07:19.757 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration calendar_date -> org.hibernate.type.CalendarDateType@1d9b7cce 20:07:19.757 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration calendar_time -> org.hibernate.type.CalendarTimeType@6c80d78a 20:07:19.758 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration locale -> org.hibernate.type.LocaleType@5fdcaa40 20:07:19.758 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Locale -> org.hibernate.type.LocaleType@5fdcaa40 20:07:19.759 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration currency -> org.hibernate.type.CurrencyType@6e20b53a 20:07:19.759 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Currency -> org.hibernate.type.CurrencyType@6e20b53a 20:07:19.759 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration timezone -> org.hibernate.type.TimeZoneType@74e52303 20:07:19.759 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.util.TimeZone -> org.hibernate.type.TimeZoneType@74e52303 20:07:19.760 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration class -> org.hibernate.type.ClassType@5af3afd9 20:07:19.761 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Class -> org.hibernate.type.ClassType@5af3afd9 20:07:19.761 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration uuid-binary -> org.hibernate.type.UUIDBinaryType@4567f35d 20:07:19.761 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.util.UUID -> org.hibernate.type.UUIDBinaryType@4567f35d 20:07:19.762 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration uuid-char -> org.hibernate.type.UUIDCharType@4f18837a 20:07:19.764 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration binary -> org.hibernate.type.BinaryType@a514af7 20:07:19.764 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration byte[] -> org.hibernate.type.BinaryType@a514af7 20:07:19.764 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration [B -> org.hibernate.type.BinaryType@a514af7 20:07:19.765 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-binary -> org.hibernate.type.WrapperBinaryType@79924b 20:07:19.766 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration Byte[] -> org.hibernate.type.WrapperBinaryType@79924b 20:07:19.766 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration [Ljava.lang.Byte; -> org.hibernate.type.WrapperBinaryType@79924b 20:07:19.766 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration row_version -> org.hibernate.type.RowVersionType@294425a7 20:07:19.767 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration image -> org.hibernate.type.ImageType@12468a38 20:07:19.768 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration characters -> org.hibernate.type.CharArrayType@5b239d7d 20:07:19.768 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration char[] -> org.hibernate.type.CharArrayType@5b239d7d 20:07:19.768 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration [C -> org.hibernate.type.CharArrayType@5b239d7d 20:07:19.768 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-characters -> org.hibernate.type.CharacterArrayType@52bf72b5 20:07:19.769 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration [Ljava.lang.Character; -> org.hibernate.type.CharacterArrayType@52bf72b5 20:07:19.769 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration Character[] -> org.hibernate.type.CharacterArrayType@52bf72b5 20:07:19.769 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration text -> org.hibernate.type.TextType@dd8ba08 20:07:19.770 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration ntext -> org.hibernate.type.NTextType@6ae5aa72 20:07:19.770 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration blob -> org.hibernate.type.BlobType@2d7275fc 20:07:19.771 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Blob -> org.hibernate.type.BlobType@2d7275fc 20:07:19.771 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob -> org.hibernate.type.MaterializedBlobType@478190fc 20:07:19.772 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration clob -> org.hibernate.type.ClobType@564fabc8 20:07:19.772 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Clob -> org.hibernate.type.ClobType@564fabc8 20:07:19.773 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration nclob -> org.hibernate.type.NClobType@436813f3 20:07:19.773 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.NClob -> org.hibernate.type.NClobType@436813f3 20:07:19.773 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob -> org.hibernate.type.MaterializedClobType@10e31a9a 20:07:19.774 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob -> org.hibernate.type.MaterializedNClobType@77847718 20:07:19.775 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration serializable -> org.hibernate.type.SerializableType@c8c12ac 20:07:19.777 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration object -> org.hibernate.type.ObjectType@5b8dfcc1 20:07:19.777 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.ObjectType@5b8dfcc1 20:07:19.777 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration imm_date -> org.hibernate.type.AdaptedImmutableType@35e2d654 20:07:19.777 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration imm_time -> org.hibernate.type.AdaptedImmutableType@1bd4fdd 20:07:19.777 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration imm_timestamp -> org.hibernate.type.AdaptedImmutableType@55183b20 20:07:19.777 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration imm_dbtimestamp -> org.hibernate.type.AdaptedImmutableType@4f83df68 20:07:19.777 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar -> org.hibernate.type.AdaptedImmutableType@6cf0e0ba 20:07:19.777 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_date -> org.hibernate.type.AdaptedImmutableType@7d8995e 20:07:19.777 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration imm_binary -> org.hibernate.type.AdaptedImmutableType@130d63be 20:07:19.777 [main] DEBUG org.hibernate.type.BasicTypeRegistry - Adding type registration imm_serializable -> org.hibernate.type.AdaptedImmutableType@42a48628 20:07:19.785 [main] DEBUG org.hibernate.boot.internal.BootstrapContextImpl - Injecting ScanEnvironment [org.hibernate.jpa.boot.internal.StandardJpaScanEnvironmentImpl@1bb5a082] into BootstrapContext; was [null] 20:07:19.785 [main] DEBUG org.hibernate.boot.internal.BootstrapContextImpl - Injecting ScanOptions [org.hibernate.boot.archive.scan.internal.StandardScanOptions@78691363] into BootstrapContext; was [org.hibernate.boot.archive.scan.internal.StandardScanOptions@41d477ed] 20:07:19.823 [main] DEBUG org.hibernate.boot.internal.BootstrapContextImpl - Injecting JPA temp ClassLoader [null] into BootstrapContext; was [null] 20:07:19.823 [main] DEBUG org.hibernate.boot.internal.ClassLoaderAccessImpl - ClassLoaderAccessImpl#injectTempClassLoader(null) [was null] 20:07:19.833 [main] DEBUG org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory - Registering IdentifierGenerator strategy [uuid2] -> [org.hibernate.id.UUIDGenerator] 20:07:19.834 [main] DEBUG org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory - Registering IdentifierGenerator strategy [guid] -> [org.hibernate.id.GUIDGenerator] 20:07:19.835 [main] DEBUG org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory - Registering IdentifierGenerator strategy [uuid] -> [org.hibernate.id.UUIDHexGenerator] 20:07:19.835 [main] DEBUG org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory - Registering IdentifierGenerator strategy [uuid.hex] -> [org.hibernate.id.UUIDHexGenerator] 20:07:19.835 [main] DEBUG org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory - Registering IdentifierGenerator strategy [assigned] -> [org.hibernate.id.Assigned] 20:07:19.836 [main] DEBUG org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory - Registering IdentifierGenerator strategy [identity] -> [org.hibernate.id.IdentityGenerator] 20:07:19.837 [main] DEBUG org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory - Registering IdentifierGenerator strategy [select] -> [org.hibernate.id.SelectGenerator] 20:07:19.838 [main] DEBUG org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory - Registering IdentifierGenerator strategy [sequence] -> [org.hibernate.id.enhanced.SequenceStyleGenerator] 20:07:19.839 [main] DEBUG org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory - Registering IdentifierGenerator strategy [seqhilo] -> [org.hibernate.id.SequenceHiLoGenerator] 20:07:19.839 [main] DEBUG org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory - Registering IdentifierGenerator strategy [increment] -> [org.hibernate.id.IncrementGenerator] 20:07:19.839 [main] DEBUG org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory - Registering IdentifierGenerator strategy [foreign] -> [org.hibernate.id.ForeignGenerator] 20:07:19.840 [main] DEBUG org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory - Registering IdentifierGenerator strategy [sequence-identity] -> [org.hibernate.id.SequenceIdentityGenerator] 20:07:19.840 [main] DEBUG org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory - Registering IdentifierGenerator strategy [enhanced-sequence] -> [org.hibernate.id.enhanced.SequenceStyleGenerator] 20:07:19.840 [main] DEBUG org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory - Registering IdentifierGenerator strategy [enhanced-table] -> [org.hibernate.id.enhanced.TableGenerator] 20:07:19.844 [main] WARN org.hibernate.orm.connections.pooling - HHH10001002: Using Hibernate built-in connection pool (not for production use!) 20:07:19.847 [main] INFO org.hibernate.orm.connections.pooling - HHH10001005: using driver [org.h2.Driver] at URL [jdbc:h2:tcp://localhost/~/test] 20:07:19.847 [main] INFO org.hibernate.orm.connections.pooling - HHH10001001: Connection properties: {user=sa, password=} 20:07:19.847 [main] INFO org.hibernate.orm.connections.pooling - HHH10001003: Autocommit mode: false 20:07:19.850 [main] DEBUG org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl - Initializing Connection pool with 1 Connections 20:07:19.850 [main] INFO org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl - HHH000115: Hibernate connection pool size: 20 (min=1) 20:07:19.913 [main] DEBUG org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator - Database -> name : H2 version : 1.4.200 (2019-10-14) major : 1 minor : 4 20:07:19.913 [main] DEBUG org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator - Driver -> name : H2 JDBC Driver version : 1.4.200 (2019-10-14) major : 1 minor : 4 20:07:19.913 [main] DEBUG org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator - JDBC version : 4.1 20:07:19.925 [main] INFO org.hibernate.dialect.Dialect - HHH000400: Using dialect: org.hibernate.dialect.H2Dialect 20:07:19.975 [main] DEBUG org.hibernate.engine.jdbc.env.spi.IdentifierHelperBuilder - JDBC driver metadata reported database stores quoted identifiers in neither upper, lower nor mixed case 20:07:20.015 [main] DEBUG org.hibernate.boot.model.relational.Namespace - Created database namespace [logicalName=Name{catalog=null, schema=null}, physicalName=Name{catalog=null, schema=null}] 20:07:20.021 [main] DEBUG org.hibernate.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@17fc391b] to MetadataBuildingContext [org.hibernate.boot.internal.MetadataBuildingContextRootImpl@2b30a42c] 20:07:20.064 [main] DEBUG org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: Member 20:07:20.079 [main] DEBUG org.hibernate.cfg.Ejb3Column - Binding column: Ejb3DiscriminatorColumn{logicalColumnName'DTYPE', discriminatorTypeName='string'} 20:07:20.082 [main] DEBUG org.hibernate.cfg.annotations.EntityBinder - Import with entity name Member 20:07:20.084 [main] DEBUG org.hibernate.cfg.annotations.EntityBinder - Bind entity Member on table MEMBER 20:07:20.099 [main] DEBUG org.hibernate.cfg.Ejb3Column - Binding column: Ejb3Column{table=org.hibernate.mapping.Table(MEMBER), mappingColumn=id, insertable=true, updatable=true, unique=false} 20:07:20.103 [main] DEBUG org.hibernate.boot.internal.ClassLoaderAccessImpl - Not known whether passed class name [Member] is safe 20:07:20.103 [main] DEBUG org.hibernate.boot.internal.ClassLoaderAccessImpl - No temp ClassLoader provided; using live ClassLoader for loading potentially unsafe class : Member 20:07:20.103 [main] DEBUG org.hibernate.cfg.annotations.PropertyBinder - MetadataSourceProcessor property id with lazy=false 20:07:20.105 [main] DEBUG org.hibernate.cfg.AbstractPropertyHolder - Attempting to locate auto-apply AttributeConverter for property [Member:id] 20:07:20.107 [main] DEBUG org.hibernate.cfg.annotations.SimpleValueBinder - building SimpleValue for id 20:07:20.108 [main] DEBUG org.hibernate.cfg.annotations.PropertyBinder - Building property id 20:07:20.110 [main] DEBUG org.hibernate.cfg.BinderHelper - #makeIdGenerator(org.hibernate.mapping.SimpleValue([org.hibernate.mapping.Column(id)]), id, assigned, , ...) 20:07:20.111 [main] DEBUG org.hibernate.cfg.Ejb3Column - Binding column: Ejb3Column{table=org.hibernate.mapping.Table(MEMBER), mappingColumn=name, insertable=true, updatable=true, unique=false} 20:07:20.111 [main] DEBUG org.hibernate.cfg.annotations.PropertyBinder - MetadataSourceProcessor property name with lazy=false 20:07:20.111 [main] DEBUG org.hibernate.cfg.AbstractPropertyHolder - Attempting to locate auto-apply AttributeConverter for property [Member:name] 20:07:20.111 [main] DEBUG org.hibernate.cfg.annotations.SimpleValueBinder - building SimpleValue for name 20:07:20.111 [main] DEBUG org.hibernate.cfg.annotations.PropertyBinder - Building property name 20:07:20.114 [main] DEBUG org.hibernate.cfg.annotations.SimpleValueBinder - Starting fillSimpleValue for id 20:07:20.115 [main] DEBUG org.hibernate.cfg.annotations.SimpleValueBinder - Starting fillSimpleValue for name 20:07:20.115 [main] DEBUG org.hibernate.mapping.PrimaryKey - Forcing column [id] to be non-null as it is part of the primary key for table [member] 20:07:20.173 [main] DEBUG org.hibernate.internal.SessionFactoryImpl - Building session factory 20:07:20.173 [main] DEBUG org.hibernate.cfg.Settings - SessionFactory name : null 20:07:20.174 [main] DEBUG org.hibernate.cfg.Settings - Automatic flush during beforeCompletion(): enabled 20:07:20.174 [main] DEBUG org.hibernate.cfg.Settings - Automatic session close at end of transaction: disabled 20:07:20.174 [main] DEBUG org.hibernate.cfg.Settings - Statistics: disabled 20:07:20.174 [main] DEBUG org.hibernate.cfg.Settings - Deleted entity synthetic identifier rollback: disabled 20:07:20.174 [main] DEBUG org.hibernate.cfg.Settings - Default entity-mode: pojo 20:07:20.174 [main] DEBUG org.hibernate.cfg.Settings - Check Nullability in Core (should be disabled when Bean Validation is on): enabled 20:07:20.174 [main] DEBUG org.hibernate.cfg.Settings - Allow initialization of lazy state outside session : disabled 20:07:20.174 [main] DEBUG org.hibernate.cfg.Settings - Using BatchFetchStyle : LEGACY 20:07:20.174 [main] DEBUG org.hibernate.cfg.Settings - Default batch fetch size: -1 20:07:20.174 [main] DEBUG org.hibernate.cfg.Settings - Maximum outer join fetch depth: null 20:07:20.174 [main] DEBUG org.hibernate.cfg.Settings - Default null ordering: NONE 20:07:20.174 [main] DEBUG org.hibernate.cfg.Settings - Order SQL updates by primary key: disabled 20:07:20.174 [main] DEBUG org.hibernate.cfg.Settings - Order SQL inserts for batching: disabled 20:07:20.174 [main] DEBUG org.hibernate.cfg.Settings - multi-tenancy strategy : NONE 20:07:20.174 [main] DEBUG org.hibernate.cfg.Settings - JTA Track by Thread: enabled 20:07:20.174 [main] DEBUG org.hibernate.cfg.Settings - Query language substitutions: {} 20:07:20.174 [main] DEBUG org.hibernate.cfg.Settings - Named query checking : enabled 20:07:20.174 [main] DEBUG org.hibernate.cfg.Settings - Second-level cache: disabled 20:07:20.174 [main] DEBUG org.hibernate.cfg.Settings - Second-level query cache: disabled 20:07:20.174 [main] DEBUG org.hibernate.cfg.Settings - Second-level query cache factory: null 20:07:20.174 [main] DEBUG org.hibernate.cfg.Settings - Second-level cache region prefix: null 20:07:20.174 [main] DEBUG org.hibernate.cfg.Settings - Optimize second-level cache for minimal puts: disabled 20:07:20.174 [main] DEBUG org.hibernate.cfg.Settings - Structured second-level cache entries: disabled 20:07:20.175 [main] DEBUG org.hibernate.cfg.Settings - Second-level cache direct-reference entries: disabled 20:07:20.175 [main] DEBUG org.hibernate.cfg.Settings - Automatic eviction of collection cache: disabled 20:07:20.175 [main] DEBUG org.hibernate.cfg.Settings - JDBC batch size: 15 20:07:20.175 [main] DEBUG org.hibernate.cfg.Settings - JDBC batch updates for versioned data: enabled 20:07:20.175 [main] DEBUG org.hibernate.cfg.Settings - Scrollable result sets: enabled 20:07:20.175 [main] DEBUG org.hibernate.cfg.Settings - Wrap result sets: disabled 20:07:20.175 [main] DEBUG org.hibernate.cfg.Settings - JDBC3 getGeneratedKeys(): enabled 20:07:20.175 [main] DEBUG org.hibernate.cfg.Settings - JDBC result set fetch size: null 20:07:20.175 [main] DEBUG org.hibernate.cfg.Settings - Connection release mode: AFTER_TRANSACTION 20:07:20.175 [main] DEBUG org.hibernate.cfg.Settings - Generate SQL with comments: enabled 20:07:20.175 [main] DEBUG org.hibernate.cfg.Settings - JPA compliance - query : disabled 20:07:20.175 [main] DEBUG org.hibernate.cfg.Settings - JPA compliance - closed-handling : disabled 20:07:20.175 [main] DEBUG org.hibernate.cfg.Settings - JPA compliance - lists : disabled 20:07:20.175 [main] DEBUG org.hibernate.cfg.Settings - JPA compliance - transactions : disabled 20:07:20.237 [main] DEBUG org.hibernate.internal.SessionFactoryImpl - Session factory constructed with filter configurations : {} 20:07:20.237 [main] DEBUG org.hibernate.internal.SessionFactoryImpl - Instantiating session factory with properties: {sun.desktop=windows, awt.toolkit=sun.awt.windows.WToolkit, hibernate.format_sql=true, java.specification.version=1.8, file.encoding.pkg=sun.io, sun.cpu.isalist=amd64, sun.jnu.encoding=MS949, hibernate.dialect=org.hibernate.dialect.H2Dialect, java.class.path=C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\charsets.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\ext\access-bridge-64.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\ext\cldrdata.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\ext\dnsns.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\ext\jaccess.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\ext\jfxrt.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\ext\localedata.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\ext\nashorn.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\ext\sunec.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\ext\sunjce_provider.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\ext\sunmscapi.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\ext\sunpkcs11.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\ext\zipfs.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\jce.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\jfr.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\jfxswt.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\jsse.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\management-agent.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\resources.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\rt.jar;C:\study-kimyounghan\ex1-hello-jpa\target\classes;C:\Users\zzaaq\.m2\repository\org\hibernate\hibernate-core\5.4.29.Final\hibernate-core-5.4.29.Final.jar;C:\Users\zzaaq\.m2\repository\org\jboss\logging\jboss-logging\3.4.1.Final\jboss-logging-3.4.1.Final.jar;C:\Users\zzaaq\.m2\repository\javax\persistence\javax.persistence-api\2.2\javax.persistence-api-2.2.jar;C:\Users\zzaaq\.m2\repository\org\javassist\javassist\3.27.0-GA\javassist-3.27.0-GA.jar;C:\Users\zzaaq\.m2\repository\net\bytebuddy\byte-buddy\1.10.21\byte-buddy-1.10.21.jar;C:\Users\zzaaq\.m2\repository\antlr\antlr\2.7.7\antlr-2.7.7.jar;C:\Users\zzaaq\.m2\repository\org\jboss\spec\javax\transaction\jboss-transaction-api_1.2_spec\1.1.1.Final\jboss-transaction-api_1.2_spec-1.1.1.Final.jar;C:\Users\zzaaq\.m2\repository\org\jboss\jandex\2.2.3.Final\jandex-2.2.3.Final.jar;C:\Users\zzaaq\.m2\repository\com\fasterxml\classmate\1.5.1\classmate-1.5.1.jar;C:\Users\zzaaq\.m2\repository\javax\activation\javax.activation-api\1.2.0\javax.activation-api-1.2.0.jar;C:\Users\zzaaq\.m2\repository\org\dom4j\dom4j\2.1.3\dom4j-2.1.3.jar;C:\Users\zzaaq\.m2\repository\org\hibernate\common\hibernate-commons-annotations\5.1.2.Final\hibernate-commons-annotations-5.1.2.Final.jar;C:\Users\zzaaq\.m2\repository\org\glassfish\jaxb\jaxb-runtime\2.3.1\jaxb-runtime-2.3.1.jar;C:\Users\zzaaq\.m2\repository\org\glassfish\jaxb\txw2\2.3.1\txw2-2.3.1.jar;C:\Users\zzaaq\.m2\repository\com\sun\istack\istack-commons-runtime\3.0.7\istack-commons-runtime-3.0.7.jar;C:\Users\zzaaq\.m2\repository\org\jvnet\staxex\stax-ex\1.8\stax-ex-1.8.jar;C:\Users\zzaaq\.m2\repository\com\sun\xml\fastinfoset\FastInfoset\1.2.15\FastInfoset-1.2.15.jar;C:\Users\zzaaq\.m2\repository\javax\xml\bind\jaxb-api\2.3.1\jaxb-api-2.3.1.jar;C:\Users\zzaaq\.m2\repository\com\h2database\h2\1.4.200\h2-1.4.200.jar;C:\Users\zzaaq\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\zzaaq\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\zzaaq\.m2\repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.3.2\lib\idea_rt.jar, java.vm.vendor=Amazon.com Inc., sun.arch.data.model=64, user.variant=, java.vendor.url=https://aws.amazon.com/corretto/, user.timezone=Asia/Seoul, javax.persistence.jdbc.url=jdbc:h2:tcp://localhost/~/test, javax.persistence.jdbc.user=****, os.name=Windows 11, java.vm.specification.version=1.8, user.country=KR, sun.java.launcher=SUN_STANDARD, local.setting.IS_JTA_TXN_COORD=false, sun.boot.library.path=C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\bin, sun.java.command=JpaMain, hibernate.use_sql_comments=true, sun.cpu.endian=little, user.home=C:\Users\zzaaq, user.language=ko, java.specification.vendor=Oracle Corporation, java.home=C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre, file.separator=\, line.separator= , java.vm.specification.vendor=Oracle Corporation, java.specification.name=Java Platform API Specification, hibernate.transaction.coordinator_class=class org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorBuilderImpl, java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment, javax.persistence.jdbc.driver=org.h2.Driver, sun.boot.class.path=C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\resources.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\rt.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\sunrsasign.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\jsse.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\jce.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\charsets.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\jfr.jar;C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\classes, user.script=, sun.management.compiler=HotSpot 64-Bit Tiered Compilers, java.runtime.version=1.8.0_382-b05, user.name=zzaaq, path.separator=;, hibernate.connection.username=****, os.version=10.0, java.endorsed.dirs=C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\endorsed, java.runtime.name=OpenJDK Runtime Environment, hibernate.connection.url=jdbc:h2:tcp://localhost/~/test, file.encoding=UTF-8, hibernate.ejb.persistenceUnitName=hello, java.vm.name=OpenJDK 64-Bit Server VM, hibernate.show_sql=true, hibernate.connection.driver_class=org.h2.Driver, java.vendor.url.bug=https://github.com/corretto/corretto-8/issues/, java.io.tmpdir=C:\Users\zzaaq\AppData\Local\Temp\, java.version=1.8.0_382, user.dir=C:\study-kimyounghan\ex1-hello-jpa, os.arch=amd64, java.vm.specification.name=Java Virtual Machine Specification, java.awt.printerjob=sun.awt.windows.WPrinterJob, hibernate.connection.password=****, sun.os.patch.level=, hibernate.boot.CfgXmlAccessService.key=org.hibernate.boot.registry.StandardServiceRegistryBuilder$1@2c1156a7, java.library.path=C:\Users\zzaaq\.jdks\corretto-1.8.0_382\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Program Files\Common Files\Oracle\Java\javapath;C:\Program Files\Zulu\zulu-8\bin\;C:\Program Files (x86)\VMware\VMware Player\bin\;C:\oraclexe\app\oracle\product\11.2.0\server\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Program Files\Microsoft SQL Server\150\Tools\Binn\;C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\;C:\Program Files\dotnet\;C:\Program Files\MySQL\MySQL Server 8.0\bin;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\nodejs\;C:\Program Files\Git\cmd;C:\Program Files\Java\jdk-11.0.12\bin;C:\Program Files\MySQL\MySQL Shell 8.0\bin\;C:\Users\zzaaq\AppData\Local\Programs\Python\Python310\Scripts\;C:\Users\zzaaq\AppData\Local\Programs\Python\Python310\;C:\Users\zzaaq\AppData\Local\Microsoft\WindowsApps;C:\Users\zzaaq\.dotnet\tools;C:\Users\zzaaq\AppData\Local\Programs\Microsoft VS Code\bin;C:\Users\zzaaq\AppData\Local\Programs\Python\Python36-32\Scripts;"C:\Users\zzaaq\AppData\Local\Android\Sdk\emulator; C:\Users\zzaaq\AppData\Local\Android\Sdk\platform-tools; C:\Users\zzaaq\AppData\Local\Android\Sdk\tools;";;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2021.3.2\bin;;C:\Users\zzaaq\AppData\Roaming\npm;., java.vendor=Amazon.com Inc., java.vm.info=mixed mode, java.vm.version=25.382-b05, java.specification.maintenance.version=5, hibernate.bytecode.use_reflection_optimizer=false, sun.io.unicode.encoding=UnicodeLittle, java.ext.dirs=C:\Users\zzaaq\.jdks\corretto-1.8.0_382\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext, javax.persistence.jdbc.password=****, java.class.version=52.0} 20:07:20.246 [main] DEBUG org.hibernate.secure.spi.JaccIntegrator - Skipping JACC integration as it was not enabled 20:07:20.247 [main] DEBUG org.hibernate.internal.SessionFactoryImpl - Instantiated session factory 20:07:20.247 [main] DEBUG org.hibernate.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@17fc391b] to SessionFactoryImpl [org.hibernate.internal.SessionFactoryImpl@50468873] 20:07:20.285 [main] DEBUG org.hibernate.boot.internal.ClassLoaderAccessImpl - Not known whether passed class name [Member] is safe 20:07:20.285 [main] DEBUG org.hibernate.boot.internal.ClassLoaderAccessImpl - No temp ClassLoader provided; using live ClassLoader for loading potentially unsafe class : Member 20:07:20.434 [main] DEBUG org.hibernate.persister.entity.AbstractEntityPersister - Static SQL for entity: Member 20:07:20.434 [main] DEBUG org.hibernate.persister.entity.AbstractEntityPersister - Version select: /* get version Member */ select id from MEMBER where id =? 20:07:20.434 [main] DEBUG org.hibernate.persister.entity.AbstractEntityPersister - Snapshot select: /* get current state Member */ select member_.id, member_.name as name2_0_ from MEMBER member_ where member_.id=? 20:07:20.434 [main] DEBUG org.hibernate.persister.entity.AbstractEntityPersister - Insert 0: /* insert Member */ insert into MEMBER (name, id) values (?, ?) 20:07:20.434 [main] DEBUG org.hibernate.persister.entity.AbstractEntityPersister - Update 0: /* update Member */ update MEMBER set name=? where id=? 20:07:20.434 [main] DEBUG org.hibernate.persister.entity.AbstractEntityPersister - Delete 0: /* delete Member */ delete from MEMBER where id=? 20:07:20.453 [main] DEBUG org.hibernate.loader.plan.build.internal.spaces.QuerySpacesImpl - Adding QuerySpace : uid = <gen:0> -> org.hibernate.loader.plan.build.internal.spaces.EntityQuerySpaceImpl@5db4c359] 20:07:20.454 [main] DEBUG org.hibernate.persister.walking.spi.MetamodelGraphWalker - Visiting attribute path : name 20:07:20.455 [main] DEBUG org.hibernate.loader.plan.build.internal.FetchStyleLoadPlanBuildingAssociationVisitationStrategy - Building LoadPlan... 20:07:20.469 [main] DEBUG org.hibernate.loader.plan.exec.internal.LoadQueryJoinAndFetchProcessor - processing queryspace <gen:0> 20:07:20.475 [main] DEBUG org.hibernate.loader.plan.build.spi.LoadPlanTreePrinter - LoadPlan(entity=Member) - Returns - EntityReturnImpl(entity=Member, querySpaceUid=<gen:0>, path=Member) - QuerySpaces - EntityQuerySpaceImpl(uid=<gen:0>, entity=Member) - SQL table alias mapping - member0_ - alias suffix - 0_ - suffixed key columns - {id1_0_0_} 20:07:20.477 [main] DEBUG org.hibernate.loader.entity.plan.EntityLoader - Static select for entity Member [NONE]: select member0_.id as id1_0_0_, member0_.name as name2_0_0_ from MEMBER member0_ where member0_.id=? 20:07:20.510 [main] DEBUG org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator - No actions specified; doing nothing 20:07:20.510 [main] DEBUG org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator - No JtaPlatform was specified, checking resolver 20:07:20.511 [main] DEBUG org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformResolverInitiator - No JtaPlatformResolver was specified, using default [org.hibernate.engine.transaction.jta.platform.internal.StandardJtaPlatformResolver] 20:07:20.515 [main] DEBUG org.hibernate.engine.transaction.jta.platform.internal.StandardJtaPlatformResolver - Could not resolve JtaPlatform, using default [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] 20:07:20.515 [main] INFO org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] 20:07:20.516 [main] DEBUG org.hibernate.query.spi.NamedQueryRepository - Checking 0 named HQL queries 20:07:20.516 [main] DEBUG org.hibernate.query.spi.NamedQueryRepository - Checking 0 named SQL queries 20:07:20.523 [main] DEBUG org.hibernate.internal.SessionFactoryRegistry - Initializing SessionFactoryRegistry : org.hibernate.internal.SessionFactoryRegistry@62d363ab 20:07:20.526 [main] DEBUG org.hibernate.internal.SessionFactoryRegistry - Registering SessionFactory: 7fd1ddf4-17f5-407a-a853-d4504f40e72b (<unnamed>) 20:07:20.526 [main] DEBUG org.hibernate.internal.SessionFactoryRegistry - Not binding SessionFactory to JNDI, no JNDI name configured 20:07:20.575 [main] DEBUG org.hibernate.stat.internal.StatisticsInitiator - Statistics initialized [enabled=false] 20:07:20.580 [main] DEBUG org.hibernate.engine.transaction.internal.TransactionImpl - On TransactionImpl creation, JpaCompliance#isJpaTransactionComplianceEnabled == false 20:07:20.580 [main] DEBUG org.hibernate.engine.transaction.internal.TransactionImpl - begin 20:07:20.591 [main] DEBUG org.hibernate.hql.internal.QueryTranslatorFactoryInitiator - QueryTranslatorFactory: org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory@c074c0c 20:07:20.610 [main] DEBUG org.hibernate.hql.internal.ast.QueryTranslatorImpl - parse() - HQL: SELECT m FROM Member AS m 20:07:20.613 [main] ERROR org.hibernate.hql.internal.ast.ErrorTracker - line 1:15: unexpected token: Member 20:07:20.614 [main] ERROR org.hibernate.hql.internal.ast.ErrorTracker - line 1:15: unexpected token: Member antlr.NoViableAltException: unexpected token: Member at org.hibernate.hql.internal.antlr.HqlBaseParser.fromRange(HqlBaseParser.java:1666) at org.hibernate.hql.internal.antlr.HqlBaseParser.fromClause(HqlBaseParser.java:1465) at org.hibernate.hql.internal.antlr.HqlBaseParser.selectFrom(HqlBaseParser.java:1165) at org.hibernate.hql.internal.antlr.HqlBaseParser.queryRule(HqlBaseParser.java:825) at org.hibernate.hql.internal.antlr.HqlBaseParser.selectStatement(HqlBaseParser.java:336) at org.hibernate.hql.internal.antlr.HqlBaseParser.statement(HqlBaseParser.java:200) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:294) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:189) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:144) at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:113) at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:73) at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:162) at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:613) at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:725) at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:825) at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:23) at JpaMain.main(JpaMain.java:35) 20:07:20.616 [main] DEBUG org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl - JDBC transaction marked for rollback-only (exception provided for stack trace) java.lang.Exception: exception just for purpose of providing stack trace at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.markRollbackOnly(JdbcResourceLocalTransactionCoordinatorImpl.java:324) at org.hibernate.engine.transaction.internal.TransactionImpl.markRollbackOnly(TransactionImpl.java:203) at org.hibernate.internal.AbstractSharedSessionContract.markForRollbackOnly(AbstractSharedSessionContract.java:405) at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:733) at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:825) at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:23) at JpaMain.main(JpaMain.java:35) 20:07:20.619 [main] DEBUG org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl - JDBC transaction marked for rollback-only (exception provided for stack trace) java.lang.Exception: exception just for purpose of providing stack trace at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.markRollbackOnly(JdbcResourceLocalTransactionCoordinatorImpl.java:324) at org.hibernate.engine.transaction.internal.TransactionImpl.markRollbackOnly(TransactionImpl.java:203) at org.hibernate.internal.AbstractSharedSessionContract.markForRollbackOnly(AbstractSharedSessionContract.java:405) at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:191) at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:830) at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:23) at JpaMain.main(JpaMain.java:35) 20:07:20.619 [main] DEBUG org.hibernate.engine.transaction.internal.TransactionImpl - rolling back 20:07:20.620 [main] DEBUG org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl - Initiating JDBC connection release from afterTransaction 20:07:20.620 [main] DEBUG org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl - Initiating JDBC connection release from afterTransaction 20:07:20.622 [main] DEBUG org.hibernate.internal.SessionFactoryImpl - HHH000031: Closing 20:07:20.623 [main] DEBUG org.hibernate.type.spi.TypeConfiguration$Scope - Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@315df4bb] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@50468873] 20:07:20.623 [main] DEBUG org.hibernate.service.internal.AbstractServiceRegistryImpl - Implicitly destroying ServiceRegistry on de-registration of all child ServiceRegistries 20:07:20.623 [main] INFO org.hibernate.orm.connections.pooling - HHH10001008: Cleaning up connection pool [jdbc:h2:tcp://localhost/~/test] 20:07:20.624 [main] DEBUG org.hibernate.boot.registry.internal.BootstrapServiceRegistryImpl - Implicitly destroying Boot-strap registry on de-registration of all child ServiceRegistries Process finished with exit code 0
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
일대일 매핑 질문
안녕하세요 일대일 매핑 강의를 듣던 중에 '외래키에 null 허용'이라는 부분이 이해가 잘 안돼서 질문드립니다. 어느 연관관계든, 예를 들어 유저한명이 게시글을 여러개쓴다고 하면 다대일 관계로 매핑할 수 있는데 그러면 유저가 게시글을 하나도 작성하지 않아도 null이 되는거 아닌가요? 그리고 대상 테이블에 외래키를 뒀을 때 '외래키에 null 허용'이 해결된다는 점도 잘 모르겠습니다. 제가 어떤 부분을 이해 못하고 있는지 모르겠어서 질문드려요.
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
IDENTITY 전략에서 1차 캐시에 entity가 저장되는 시점은 언제인가요?
4.6.2 IDENTITY 키 생성 전략에서 1차 캐시에 저장할 때는 기본키가 반드시 필요하기 때문에 em.persist()를 호출하는 시점에 바로 DB에 INSERT SQL 이 실행된다고 적혀있습니다.그리고 Statement.getGeneratedKeys()를 사용해서 데이터 저장과 동시에 기본 키값을 얻어올 수 있습니다.그렇다면, 1차 캐시에는 DB에 INSERT SQL이 실행된 직후 entity가 저장되는건가요?아니면, em.find()를 하는 시점에 1차 캐시에 entity가 저장되는 걸까요?아래 사진에서 왼쪽일까요, 오른쪽일까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
t.members 값 확인이 되지 않습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]String query = "select t.members From Team t";Collection result = em.createQuery(query, Collection.class).getResultList();System.out.println("result = " + result); 결과값result = [hellojpa.Domain.Member@5b7aa898, hellojpa.Domain.Member@4e642ee1]위와 같은 코드로 출력했는데 영상과 같이 리스트의 값이 나오지 않고 get 메소드도 사용도지 않아서 원하는 값들이 제대로 출력되는지 확인이 되지 않는데 왜그런건가요?혹시 엔티티 설계할때 잘못했나 싶어서 아래에 엔티티 코드 남김니다.@Entitypublic class Member {@Id @GeneratedValue @Column(name = "MEMBER_ID")private Long id; private String username; private int age; @ManyToOne @JoinColumn(name = "TEAM_ID")private Team team;ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ@Entitypublic class Team {@Id @GeneratedValue @Column(name = "TEAM_ID")private Long id; private String name; @OneToMany(mappedBy = "team")private List<Member> members = new ArrayList<>();
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
값타입 컬렉션에 대한 일대다 관계에 대한 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요! 선생님 강의를 수강하고 현재 플젝을 진행중에 값타임 컬렉션 처리와 관련해서 고민하면서 강의를 다시 보았는데도 해결방안이 잘 떠오르지 않아서 질문드렸습니다. 현재 Post 폼에서 장기 Post와 단기 Post를 나누어서 각각 작성된 폼을 DB에 저장하는데 장기 Post에서는 LocalDateTime 필드들이 리스트형식으로 있는 필드들과 다른 필드들이 함께 객체로 프론트에서 넘어오고, 단기 Post에서는 String 타입의 리스트들과 다른 필드들이 객체 형식으로 넘어옵니다. 또한 Post는 수정을 통해 날짜도 변경할 수 있습니다.따라서 @ElementCollcetion을 사용할 경우, 만약 LocatDateTime과 관련된 날짜들이 여러 개 넘어 올 경우, 날짜 각각이 insert되고, 만약 수정한다면 선생님의 말씀처럼 값타입으로 불필요한 값들까지 모두 삭제되고 다시 갱신되므로,일대다관계를 생각해보았습니다. 일대다관계일 경우 각각의 LocalDateTime 갯수만큼 insert문으로 DB에 저장될 것이고, Entity이므로 수정의 경우 필요한 부분만 수정하면 된다고 생각하였습니다. 하지만, 예를 들어 하나의 Post당 날짜 필드들이 20개라고 친다면 insert문이 20개 들어갈 것이고, Post의 갯수가 많아진다면 그에 따른 성능이나 비용측면에서 단점이 되지 않을까 생각하였습니다.그래서 다음으로는 @Converter를 사용하여 들어오는 리스트들의 값을 String 타입으로 변환하고 하나의 Column안에 넣어서 관리하는 방법을 생각하였습니다. 해당 방법은 insert문은 하나만 들어가기 때문에 성능에서 큰 문제를 일으키지 않을 것 같았는데, 만약 수정한다면 해당 컬럼을 삭제하고 다시 추가해야하고, 로직이 복잡해질 것 같습니다. 선생님께서는 현업에서 selectedbox같은 것을 처리할 때 일대다 관계를 이용해서 처리한다고 하셨는데 저와 같은 경우에도 일대다 관계 방법이 좋은 방법일지 아님 더 좋은 방법이 있을지 질문드리게 되었습니다.
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
flush commit 이해가 안되는부분이있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예[질문 내용]여기에 질문 내용을 남겨주세요. Team teamA = new Team(); teamA.setName("팀A"); em.persist(teamA); Team teamB = new Team(); teamB.setName("팀B"); em.persist(teamB); Member member1 = new Member(); member1.setUsername("회원1"); member1.setTeam(teamA); em.persist(member1); Member member2 = new Member(); member2.setUsername("회원2"); member2.setTeam(teamA); em.persist(member2); Member member3 = new Member(); member3.setUsername("회원3"); member3.setTeam(teamB); em.persist(member3); int resultCount = em.createQuery("update Member m set m.age=20") .executeUpdate(); em.clear(); Member findMember = em.find(Member.class, member1.getId()); System.out.println("findMember = " + findMember.getAge()); System.out.println("resultCount = " + resultCount); tx.commit(); System.out.println("resultCount = " + resultCount); } catch (Exception e) { 해당 코드를 보면 em.clear();이걸하면 영속성 컨텍스트를 초기화해서db 에서 값을 가져온다는데요tx.commit(); 하기 전에는 breakpoint 를 찍어보면db 에 반영이 안되어있는데어디 db 에서 가져온다는 말인지 잘 이해가 안됩니다..즉 한마디로1.em.clear(); 을 하면 영속성컨텍스트 전체 초기화2.findMember.getAge() 이 동작을 할때영속성컨텍스트에 값이 없으므로 Db 에서 가져옴3. 하지만 commit 하기전 그 시점엔 db에는 아무값이 없다(flush 의 경우에도 마찬가지 insert 가 적혀있어도 커밋 직전엔 실제 db에는 아무 값이 없다)도대체 어떤 db에만 반영되었고(이건 임시 db인건가) 가져온다는 말인지..왜냐하면 그때 실제 db에는 그 당시에 아무값도 없기때문(commit 이 일어나지 않았기 때문에) (하지만 System.out.println("findMember = " + findMember.getAge()););이 결과로보면 findMember.getAge()의 20이란 숫자를 select 해서 가져온건 맞음도대체 어디서 select 를 했단 말인가..) -콘솔 결과값이 순간 ! db 를 조회하면 (tx.commit 을 안했을 가정.) ps. 제가말한 Db 는 h2 콘솔에서 조회했을때입니다.콘솔에서 조회했을때는 안보이는데 분명 어딘가의 db 는 바뀐게 맞는거같아요db에있는 20이라는 숫자를 어디서 가져오는지가 궁금합니다.
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
사용자 정의 함수 방언 등록
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]사용자 정의함수를 db에 등록시켜놓은 다음에 jpql로 사용을 해보니 따로 방언을 등록하지 않아도 사용이 가능합니다.List<String> str = em.createQuery("select create_prefix(m.username) from Member m", String.class).getResultList();create_prefix는 직접 등록한 함수입니다.수업에서는 방언으로 사용자 정의 함수를 등록해야지 적용이 된다고 하는데 이 경우 왜 작동되는지 알고싶습니다.
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
컬렉션 값 연관 경로중 문법이 바뀐게 맞는걸까요?
경로표현식 컬렉션 값 연관경로 강의내용에서String query = "select t.members.size From Team t"; Integer result = em.createQuery(query, Integer.class) .getSingleResult(); System.out.println("result = " + result);이런식으로 하신게 있는데 제 코드에선 안돌아가더라구요결과값도 안나오고,,검색해보니깐 쿼리부분을String query = "select size(t.members) From Team t";이런식으로 바꾸면 되던데 문법이 바뀐게 맞을까요? 아니면 코드 에러인가요일단 제 디펜던시는 이렇습니다 <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>6.2.7.Final</version> </dependency> <!-- H2 데이터베이스 --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.4.200</version> </dependency>
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
depth가 2단계인 상속관계는 어떻게 설계를 해야 할까요?
depth가 2단계의 상속관계를 셋팅하는 경우 id는 최상위 엔티티의 id를 모두 공유하는 방식으로 설계를 해야 할까요?예를 들어 A가 최상위 A를 상속하는 AA, BB 그리고 다시 AA를 상속하는 AAA, BBB. CCC가 있다면 AAA를 만드는 경우 A의 id를 AA, AAA모두가 공유하는 방식이어야 하는건가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
연관관계 매핑 관련 질문 - 읽기 전용 매핑
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]연관관계 매핑 수업을 듣다가 읽기 전용 필드,매핑이란 게 정확히 뭔지 잘 모르겠습니다.예를 들어 섹션6.다양한 연관관계 매핑 수업에서 일대다 양방향 설명해 주실때 Member클래스에 team 이라는 읽기 전용필드를 사용했는데 읽기 전용 필드가 값을 변경할 순 없고 읽기만 가능하다고 하셨는데 Q1. 읽기 전용 필드가 정확히 어떤걸 변경할 수 없고 읽기만 가능하다는 건가요??team.setXX()처럼 객체에서 값을 변경할 수 없다는 건가요??Q2. Team클래스의 members 가 연관관계 주인이라서 members.add(member)이런식으로 해야 MEMBER 테이블의 TEAM_ID(FK)에 대해 update문이 나가고 team.setTeam(team) 이런식으로 하면은 MEMBER 테이블의 TEAM_ID(FK)에 대해 update문이 안나간다는 건가요??
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
실무에서 사용자 정의 함수를 많이 사용하나요?
실무에서 DB방언을 상속받아 사용자 정의 함수를 등록해서 사용하는 경우가 많은지 궁금합니다!