월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
em.flush, em.clear() 강의 7분 35초
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의 7분 30초에 강사님이 flush 하고 clear를 해줘야 한다고 했느데 안하고 하면 왜 for문의 print가 안되는 걸까요?? em.find(Member.class, member.getId())는 1차 캐시에서 얻어와서 값이 print되어야 하는거 아닌가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
saveAndFlush
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]saveAndFlush가 실무에서 어느 상황에서 사용될 수 있는지 알 수 있을까요?isolation level이 기본적으로 일정 수준(read committed) 이상이라 동일 트랜잭션 내에서 flush가 필요한 상황이 있어야할 것 같은데 saveAndFlush가 필요한 시점이 생각이 들지 않네요.jpql 쓰는 경우에는 자동으로 flush를 날리고 있고 그 외 다른 기술을 같이 사용하는 경우에 필요한걸까요?어디서 사용되는지 알고 싶습니다.감사합니다.
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
call the next value
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의 30분 쯤 시퀀스로 pk를 만드는 방법에서 call next value로 pk를 디비에서 받아온다고 하셨는데 이는 select문이랑 다른건가요?? 디비에서 받아오려면 결국 selcet문 사용해야ㅕ하는 거 아닌가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
OneToMany에서 @JoinColumn(nullable = false, updatable = false)에 대하여
안녕하세요 궁금한 것이 있습니다.JPA에서 @OneToMany를 통한 단방향 연관관계에서 문제로 지적되는 것이 Many쪽의 FK를 update. 하기 위한 추가적인 쿼리 문제인데요. (물론 이것만이 @OneToMany 단방향의 문제는 아닙니다만)이 문제는 @JoinColumn(nullable = false, updatable = false)이라는 설정을 통해 해결할 수 있는 것으로 알고 있습니다.이러면 One을 먼저 insert한 후, Many를 insert할 때 One의 PK를 바탕으로 추가적인 업데이트 쿼리 없이 바로 insert를 해주는걸로 알고 있습니다.근데 "대체 JPA는 왜 이렇게 설계한걸까?" 라는 의문이 듭니다.물론 앞서 말씀드린 방법은 FK가 not nullable이여야하고, FK가 변경되면 안된다는 제약 조건이 들어가야하기 때문에, 모든 상황에서 공통적으로 적용되는 방법은 아닙니다만, 차라리 이런 설정을 default로 하는게 이해하기 더 쉬운 방법아닌가? 라는 생각이 들어서요.FK가 nullable하고, 또 변경될 수 있는 상황은 상대적으로 적은데다가, insert한 컬럼에 FK를 추가해주기 위해 update 쿼리가 나가게 되는 로직은 성능적으로도(드라마틱하진 않지만) 좋지 않고, hibernate를 처음 사용하는 사람은 "대체 왜 이렇게 쿼리가 나가지?"라는 식으로 이해하기 어렵다고 판단이 들거든요.사실 이게 프로그래밍 하는데 중요한 지식은 아니지만.. 그냥 순전히 호기심으로 궁금합니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
hello jpa 애플리케이션 개발 오류
자바 17 사용하는데 아래와 같은 오류가 납니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
property name="hibernate.hbm2ddl.auto" value="create" 문제인가요?
섹션 9 값 타입 부분의 값 타입과 불변 객체 실습을 진행하고 있는데 계속 다음과 같은 에러가 떠서 아래와 같이 첨부합니다 8월 23, 2023 5:18:29 오후 org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformationINFO: HHH000204: Processing PersistenceUnitInfo [ name: hello ...]8월 23, 2023 5:18:29 오후 org.hibernate.Version logVersionINFO: HHH000412: Hibernate Core {5.3.10.Final}8월 23, 2023 5:18:29 오후 org.hibernate.cfg.Environment <clinit>INFO: HHH000206: hibernate.properties not found8월 23, 2023 5:18:30 오후 org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>INFO: HCANN000001: Hibernate Commons Annotations {5.0.4.Final}8월 23, 2023 5:18:33 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configureWARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)8월 23, 2023 5:18:33 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreatorINFO: HHH10001005: using driver [org.h2.Driver] at URL [jdbc:h2:tcp://localhost/~/test]8월 23, 2023 5:18:33 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreatorINFO: HHH10001001: Connection properties: {user=sa}8월 23, 2023 5:18:33 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreatorINFO: HHH10001003: Autocommit mode: false8월 23, 2023 5:18:33 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>INFO: HHH000115: Hibernate connection pool size: 20 (min=1)8월 23, 2023 5:18:33 오후 org.hibernate.dialect.Dialect <init>INFO: HHH000400: Using dialect: org.hibernate.dialect.H2DialectHibernate: drop table Child if existsHibernate: drop table Item if existsHibernate: drop table Member if exists8월 23, 2023 5:18:35 오후 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnectionINFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@5db6b845] 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.8월 23, 2023 5:18:35 오후 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 hellojpa.JpaMain.main(JpaMain.java:15)Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Cannot drop "MEMBER" because "FKJNJ8UNGT7V35Y6LFXUXCRJBBR" depends on it; SQL statement: drop table Member if exists [90107-200] at org.h2.message.DbException.getJdbcSQLException(DbException.java:576) at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) at org.h2.message.DbException.get(DbException.java:205) at org.h2.command.ddl.DropTable.prepareDrop(DropTable.java:98) at org.h2.command.ddl.DropTable.update(DropTable.java:124) at org.h2.command.CommandContainer.update(CommandContainer.java:198) at org.h2.command.Command.executeUpdate(Command.java:251) at org.h2.server.TcpServerThread.process(TcpServerThread.java:406) at org.h2.server.TcpServerThread.run(TcpServerThread.java:183) at java.base/java.lang.Thread.run(Thread.java:833) at org.h2.message.DbException.getJdbcSQLException(DbException.java:573) at org.h2.engine.SessionRemote.done(SessionRemote.java:607) at org.h2.command.CommandRemote.executeUpdate(CommandRemote.java:237) at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:233) at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:205) at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54) ... 15 more8월 23, 2023 5:18:35 오후 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 hellojpa.JpaMain.main(JpaMain.java:15)Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Cannot drop "TEAM" because "FKL7WSNY760HJY6X19KQNDUASBM" depends on it; SQL statement: drop table Team if exists [90107-200] at org.h2.message.DbException.getJdbcSQLException(DbException.java:576) at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) at org.h2.message.DbException.get(DbException.java:205) at org.h2.command.ddl.DropTable.prepareDrop(DropTable.java:98) at org.h2.command.ddl.DropTable.update(DropTable.java:124) at org.h2.command.CommandContainer.update(CommandContainer.java:198) at org.h2.command.Command.executeUpdate(Command.java:251) at org.h2.server.TcpServerThread.process(TcpServerThread.java:406) at org.h2.server.TcpServerThread.run(TcpServerThread.java:183) at java.base/java.lang.Thread.run(Thread.java:833) at org.h2.message.DbException.getJdbcSQLException(DbException.java:573) at org.h2.engine.SessionRemote.done(SessionRemote.java:607) at org.h2.command.CommandRemote.executeUpdate(CommandRemote.java:237) at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:233) at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:205) at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54) ... 15 moreHibernate: drop table MemberProduct if existsHibernate: drop table Parent 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 Child ( id bigint not null, name varchar(255), parent_id bigint, primary key (id) )Hibernate: create table Item ( DTYPE varchar(31) not null, id bigint not null, name varchar(255), price integer not null, artist varchar(255), author varchar(255), isbn varchar(255), actor varchar(255), director varchar(255), primary key (id) )Hibernate: create table Member ( MEMBER_ID bigint not null, city varchar(255), street varchar(255), ZIPCODE varchar(255), USERNAME varchar(255), endDate timestamp, startDate timestamp, TEAM_ID bigint, primary key (MEMBER_ID) )Hibernate: create table MemberProduct ( id bigint not null, count integer not null, orderDateTime timestamp, price integer not null, MEMBER_ID bigint, PRODUCT_ID bigint, primary key (id) )Hibernate: create table Parent ( id bigint not null, name varchar(255), primary key (id) )8월 23, 2023 5:18:35 오후 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnectionINFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@29a98d9f] 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.8월 23, 2023 5:18:35 오후 org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleExceptionWARN: GenerationTarget encountered exception accepting command : Error executing DDL " create table Member ( MEMBER_ID bigint not null, city varchar(255), street varchar(255), ZIPCODE varchar(255), USERNAME varchar(255), endDate timestamp, startDate timestamp, TEAM_ID bigint, primary key (MEMBER_ID) )" via JDBC Statementorg.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL " create table Member ( MEMBER_ID bigint not null, city varchar(255), street varchar(255), ZIPCODE varchar(255), USERNAME varchar(255), endDate timestamp, startDate timestamp, TEAM_ID bigint, primary key (MEMBER_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 hellojpa.JpaMain.main(JpaMain.java:15)Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "MEMBER" already exists; SQL statement: create table Member ( MEMBER_ID bigint not null, city varchar(255), street varchar(255), ZIPCODE varchar(255), USERNAME varchar(255), endDate timestamp, startDate timestamp, TEAM_ID bigint, primary key (MEMBER_ID) ) [42101-200] at org.h2.message.DbException.getJdbcSQLException(DbException.java:453) at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) at org.h2.message.DbException.get(DbException.java:205) at org.h2.message.DbException.get(DbException.java:181) at org.h2.command.ddl.CreateTable.update(CreateTable.java:89) at org.h2.command.CommandContainer.update(CommandContainer.java:198) at org.h2.command.Command.executeUpdate(Command.java:251) at org.h2.server.TcpServerThread.process(TcpServerThread.java:406) at org.h2.server.TcpServerThread.run(TcpServerThread.java:183) at java.base/java.lang.Thread.run(Thread.java:833) at org.h2.message.DbException.getJdbcSQLException(DbException.java:451) at org.h2.engine.SessionRemote.done(SessionRemote.java:607) at org.h2.command.CommandRemote.executeUpdate(CommandRemote.java:237) at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:233) at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:205) at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54) ... 15 more8월 23, 2023 5:18:35 오후 org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleExceptionWARN: GenerationTarget encountered exception accepting command : Error executing DDL " create table Team ( TEAM_ID bigint not null, INSERT_MEMBER varchar(255), createdDate timestamp, UPDATE_MEMBER varchar(255), lastModifiedDate timestamp, name varchar(255), primary key (TEAM_ID) )" via JDBC Statementorg.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL " create table Team ( TEAM_ID bigint not null, INSERT_MEMBER varchar(255), createdDate timestamp, UPDATE_MEMBER varchar(255), lastModifiedDate timestamp, name varchar(255), primary key (TEAM_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 hellojpa.JpaMain.main(JpaMain.java:15)Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "TEAM" already exists; SQL statement: create table Team ( TEAM_ID bigint not null, INSERT_MEMBER varchar(255), createdDate timestamp, UPDATE_MEMBER varchar(255), lastModifiedDate timestamp, name varchar(255), primary key (TEAM_ID) ) [42101-200] at org.h2.message.DbException.getJdbcSQLException(DbException.java:453) at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) at org.h2.message.DbException.get(DbException.java:205) at org.h2.message.DbException.get(DbException.java:181) at org.h2.command.ddl.CreateTable.update(CreateTable.java:89) at org.h2.command.CommandContainer.update(CommandContainer.java:198) at org.h2.command.Command.executeUpdate(Command.java:251) at org.h2.server.TcpServerThread.process(TcpServerThread.java:406) at org.h2.server.TcpServerThread.run(TcpServerThread.java:183) at java.base/java.lang.Thread.run(Thread.java:833) at org.h2.message.DbException.getJdbcSQLException(DbException.java:451) at org.h2.engine.SessionRemote.done(SessionRemote.java:607) at org.h2.command.CommandRemote.executeUpdate(CommandRemote.java:237) at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:233) at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:205) at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54) ... 15 moreHibernate: create table Product ( id bigint not null, name varchar(255), primary key (id) )Hibernate: create table Team ( TEAM_ID bigint not null, INSERT_MEMBER varchar(255), createdDate timestamp, UPDATE_MEMBER varchar(255), lastModifiedDate timestamp, name varchar(255), primary key (TEAM_ID) )Hibernate: alter table Child add constraint FKlh67j1n7x7gt59u0pbkwqh6o6 foreign key (parent_id) references ParentHibernate: alter table Member add constraint FKl7wsny760hjy6x19kqnduasbm foreign key (TEAM_ID) references TeamHibernate: alter table MemberProduct add constraint FKjnj8ungt7v35y6lfxuxcrjbbr foreign key (MEMBER_ID) references MemberHibernate: alter table MemberProduct add constraint FKrgt6jorh7iaec1tae84ljye8c foreign key (PRODUCT_ID) references Product8월 23, 2023 5:18:35 오후 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 hellojpa.JpaMain.main(JpaMain.java:15)Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Constraint "FKL7WSNY760HJY6X19KQNDUASBM" already exists; SQL statement: alter table Member add constraint FKl7wsny760hjy6x19kqnduasbm foreign key (TEAM_ID) references Team [90045-200] at org.h2.message.DbException.getJdbcSQLException(DbException.java:576) at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) at org.h2.message.DbException.get(DbException.java:205) at org.h2.message.DbException.get(DbException.java:181) at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:114) at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:78) at org.h2.command.CommandContainer.update(CommandContainer.java:198) at org.h2.command.Command.executeUpdate(Command.java:251) at org.h2.server.TcpServerThread.process(TcpServerThread.java:406) at org.h2.server.TcpServerThread.run(TcpServerThread.java:183) at java.base/java.lang.Thread.run(Thread.java:833) at org.h2.message.DbException.getJdbcSQLException(DbException.java:573) at org.h2.engine.SessionRemote.done(SessionRemote.java:607) at org.h2.command.CommandRemote.executeUpdate(CommandRemote.java:237) at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:233) at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:205) at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54) ... 15 more8월 23, 2023 5:18:35 오후 org.hibernate.tool.schema.internal.SchemaCreatorImpl applyImportSourcesINFO: HHH000476: Executing import script 'org.hibernate.tool.schema.internal.exec.ScriptSourceInputNonExistentImpl@45cec376'Hibernate: call next value for hibernate_sequenceHibernate: call next value for hibernate_sequenceHibernate: /* insert hellojpa.Member */ insert into Member (city, street, ZIPCODE, USERNAME, endDate, startDate, MEMBER_ID) values (?, ?, ?, ?, ?, ?, ?)Hibernate: /* insert hellojpa.Member */ insert into Member (city, street, ZIPCODE, USERNAME, endDate, startDate, MEMBER_ID) values (?, ?, ?, ?, ?, ?, ?)8월 23, 2023 5:18:36 오후 org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl releaseINFO: HHH000010: On release of batch it still contained JDBC statements8월 23, 2023 5:18:36 오후 org.hibernate.engine.jdbc.batch.internal.BatchingBatch performExecutionERROR: HHH000315: Exception executing batch [org.h2.jdbc.JdbcBatchUpdateException: Unique index or primary key violation: "PRIMARY KEY ON PUBLIC.MEMBER(MEMBER_ID) [2, 'newCity', 'street', '10000', 'member2', NULL, NULL, NULL]"; SQL statement:/* insert hellojpa.Member / insert into Member (city, street, ZIPCODE, USERNAME, endDate, startDate, MEMBER_ID) values (?, ?, ?, ?, ?, ?, ?) [23505-199]], SQL: / insert hellojpa.Member */ insert into Member (city, street, ZIPCODE, USERNAME, endDate, startDate, MEMBER_ID) values (?, ?, ?, ?, ?, ?, ?)8월 23, 2023 5:18:36 오후 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptionsWARN: SQL Error: 23505, SQLState: 235058월 23, 2023 5:18:36 오후 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptionsERROR: Unique index or primary key violation: "PRIMARY KEY ON PUBLIC.MEMBER(MEMBER_ID) [2, 'newCity', 'street', '10000', 'member2', NULL, NULL, NULL]"; SQL statement:/* insert hellojpa.Member */ insert into Member (city, street, ZIPCODE, USERNAME, endDate, startDate, MEMBER_ID) values (?, ?, ?, ?, ?, ?, ?) [23505-199]8월 23, 2023 5:18:36 오후 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptionsERROR: Unique index or primary key violation: "PRIMARY KEY ON PUBLIC.MEMBER(MEMBER_ID) [1, 'newCity', 'street', '10000', 'member1', NULL, NULL, NULL]"; SQL statement:/* insert hellojpa.Member */ insert into Member (city, street, ZIPCODE, USERNAME, endDate, startDate, MEMBER_ID) values (?, ?, ?, ?, ?, ?, ?) [23505-199]8월 23, 2023 5:18:36 오후 org.hibernate.internal.ExceptionMapperStandardImpl mapManagedFlushFailureERROR: HHH000346: Error during managed flush [org.hibernate.exception.ConstraintViolationException: could not execute batch]javax.persistence.RollbackException: Error while committing the transaction at org.hibernate.internal.ExceptionConverterImpl.convertCommitException(ExceptionConverterImpl.java:81) at org.hibernate.engine.transaction.internal.TransactionImpl.commit(TransactionImpl.java:107) at hellojpa.JpaMain.main(JpaMain.java:39)Caused by: javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not execute batch at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154) at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181) at org.hibernate.internal.ExceptionConverterImpl.convertCommitException(ExceptionConverterImpl.java:65) ... 2 moreCaused by: org.hibernate.exception.ConstraintViolationException: could not execute batch at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:112) 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.batch.internal.BatchingBatch.performExecution(BatchingBatch.java:129) at org.hibernate.engine.jdbc.batch.internal.BatchingBatch.doExecuteBatch(BatchingBatch.java:105) at org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl.execute(AbstractBatchImpl.java:147) at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.executeBatch(JdbcCoordinatorImpl.java:212) at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:633) 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) at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:511) at org.hibernate.internal.SessionImpl.flushBeforeTransactionCompletion(SessionImpl.java:3290) at org.hibernate.internal.SessionImpl.beforeTransactionCompletion(SessionImpl.java:2486) at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.beforeTransactionCompletion(JdbcCoordinatorImpl.java:473) at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.beforeCompletionCallback(JdbcResourceLocalTransactionCoordinatorImpl.java:178) at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.access$300(JdbcResourceLocalTransactionCoordinatorImpl.java:39) at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.commit(JdbcResourceLocalTransactionCoordinatorImpl.java:271) at org.hibernate.engine.transaction.internal.TransactionImpl.commit(TransactionImpl.java:104) ... 1 moreCaused by: org.h2.jdbc.JdbcBatchUpdateException: Unique index or primary key violation: "PRIMARY KEY ON PUBLIC.MEMBER(MEMBER_ID) [2, 'newCity', 'street', '10000', 'member2', NULL, NULL, NULL]"; SQL statement:/* insert hellojpa.Member */ insert into Member (city, street, ZIPCODE, USERNAME, endDate, startDate, MEMBER_ID) values (?, ?, ?, ?, ?, ?, ?) [23505-199] at org.h2.jdbc.JdbcPreparedStatement.executeBatch(JdbcPreparedStatement.java:1298) at org.hibernate.engine.jdbc.batch.internal.BatchingBatch.performExecution(BatchingBatch.java:119) ... 17 more8월 23, 2023 5:18:36 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl stopINFO: HHH10001008: Cleaning up connection pool [jdbc:h2:tcp://localhost/~/test]Process finished with exit code 0 참고로 이전에 create-drop을 사용해 테이블을 삭제했습니다.
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
예상치 못한 쿼리문이 나갑니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]코드@Entity public class Member { @Id @GeneratedValue(strategy = IDENTITY) @Column(name = "member_id") private Long id; @ManyToOne @JoinColumn(name = "team_id") private Team team; // getter & setter }@Entity public class Team { @Id @GeneratedValue(strategy = IDENTITY) @Column(name = "team_id") private Long id; private String name; @OneToMany(mappedBy = "team") private List<Member> members; // getter & setter }public class Main { public static void main(String[] args) { try { tx.begin(); Team team = new Team(); team.setName("teamA"); em.persist(team); Member member = new Member(); member.setTeam(team); em.persist(member); em.flush(); em.clear(); System.out.println("1"); Member findMember = em.find(Member.class, member.id()); System.out.println("2"); Team membersTeam = findMember.team(); System.out.println("3"); List<Member> members = membersTeam.members(); System.out.println("4"); System.out.println("size = " + members.size()); // 이때 예상치 못한 select 문이 나가는 것으로 의심된다. 출력 결과는 1 tx.commit(); System.out.println("5"); } catch (Exception e) { // handle Exception } finally { // close EntityManager } } }양뱡향 연관관계 강의를 들으며 위와 같은 코드를 작성해보았습니다.실행 결과질문4번과 5번 사이에 아무런 쿼리문이 나가지 않는 것을 기대했습니다. 하지만 왜인지 Member 테이블에서 Team의 아이디로 Member를 조회하는 쿼리문이 나갑니다.제가 생각했을 땐 members.size()를 호출함으로써 나가는 것 같은데, 위 코드는 단순히 List 형 객체의 size를 List<Member> members 는 단순히 자바에서 List 형 객체 아닌가요? 이때 왜 조회 쿼리가 나가는지 잘 모르겠습니다.만약, 나가더라도 Member 테이블에서 membersTeam: Team 의 아이디로 count 쿼리가 나가야 정상적일 것 같습니다.어느 부분을 놓쳤을까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
어떤게 문제인지 모르겠습니다 ㅠㅠ 에러 고쳐주세요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]자바 11 쓰다가 커뮤 글보고 jdk8로 바꾸고h2도 1.4.200으로 바꿨습니다 근데 이런 에러가 계속 뜨네요 혹시 몰라서 이부분도 넣엇는데 동작이 안됩니다 <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.0</version> </dependency>
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
중간테이블관련 질문
@ManyToMany에 대해 학습하는 중 궁금증이 생겨질문드립니다.ManyToMany의 경우 내부적으로 중간테이블이 생성되기에 개발자가 선제적으로 중간테이블을 생성하여 관리하는것이 편하고, 나아가 해당 중간테이블에 어떠한 비즈니스 로직에 의해 컬럼을 추가하면 하나의 엔티티로 승격된다고 이해하였습니다.ManyToMany가 아닌 다른 OneToOne과 같은 관계에서 두개의 테이블이 동시에 조회해야하는 경우가 잦을때어떠한 비즈니스 로직으로 공통되는 필드가 많을때이러한 경우에 다대다 관계가 아니더라도 추가적인 중간 테이블 생성이 지향 되는지 질문합니다. 감사합니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
fetch join alias
fetch join 시 alias를 사용해서 필터링하는게 왜 안되는걸까요?이거에 대한 답변으로 디비상태와 객체상태의 일관성이 깨지게 됨을 보통 얘기하시는것같아요alias를 사용해서 필터링해버리면 실제 디비에 있는 데이터보다 적은 개수가 나오게 되니까요.근데 어차피 그 필터링된 결과만을 결과로 리턴해주어야한다면사용해도 괜찮을 것 같은데디비상태와 객체상태의 일관성이 깨지는게 왜 문제가될까요?그래서 생각을 해봤는데 크게 다음인것같아요- 유지관리어려울 수 있음- 캐싱문제근데 저 두 문제가 정말 큰 문제가 되는지를 잘 모르겠어요...;유지관리 어려울수야 있겠지만 그렇게 까지 어려울지도 잘 모르겠고, 캐싱문제(쿼리결과캐싱)도 저 코드에 의해 영향이 얼마나 많이 갈지..도 잘 모르겠어요저 유지관리/캐싱 문제가 아니라.. 2차캐시때문인가요?예를들어서team과 member가 일대다 연관이고team을 select해온다는 sql이 있다고 가정1. fetch join + on 절 : 디비에 있는 일부 데이터 불러옴2. fetch join 만있어서 디비에있는 모든 데이터 불러옴하나의 트랜잭션에서 1호출 뒤에 2를 호출하면디비에 쿼리를 날리긴하지만 이미 team_id에 해당하는 객체가 영속성 컨텍스트에있어서 가져온거버림그래서 추후에 문제가생길 수 있음--- 인건가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
초기 jpa-basic <dependencies> 오류 문의드립니다.
프로젝트 생성화면영상에서 설명된 version 1.0.0을 어디서 선택하는지 모르겠음 초기 xml (수정전)코드 추가버전 V_1 <dependencies></dependencies> 만 복붙새로고침시 오류메세지 발생* 8번째줄인 <version>1.0.0</version>으로 바꿔도 마찬가지임 코드 추가버전 V_2 전체복붙동일한 오류 발생 Maven 번들3로 변경해도 오류는 그대로임컴퓨터에 설치된 H2 -> v.1.4.193참고로 H2에서<dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><version>1.4.199</version></dependency> 버전을 최신으로 등록해봤을땐 H2는 오류메세지가 안뜨긴 함 (이것저것 시도하다가 발견) 안녕하세요. JPA 강의를 수강하려고 자바8버전으로 프로젝트를 생성했으나 위와 같은 오류가 발생하고 있습니다.커뮤니티에 올라온 기존 답변내용대로 시도해봤으나 오류로 인해 강의진행이 어렵습니다.빠른 확인을 부탁드립니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
질문있습니다!!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. try{ Child child1 = new Child(); Child child2 = new Child(); child1.setName("자식1"); child2.setName("자식2"); Parent parent = new Parent(); parent.setName("아빠"); parent.addChild(child1); parent.addChild(child2); em.persist(parent); em.flush(); em.clear(); System.out.println("parent = " + parent.getName()); tx.commit(); }catch (Exception e){ tx.rollback(); }finally { em.close(); } (영속성전이를 설정해둔 상태입니다em.flush()하는 순간 insert쿼리가 3번나가고 clear()에서 영속성 컨텍스트를 초기화 하니까아래 parent를 println으로 찍을 때 select쿼리가 나가야 할 것 같은데 따로 안나가고 그대로 아빠라는게 찍히는데 왜 이런걸까요? 이건 그냥 영속성컨텍스트와 무관한 객체의 값을 찍은걸까요?
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
"JPA 는 모든 엔티티에 일관된 방식으로 대리 키 사용을 권장한다" 에 대해 질문드립니다.
안녕하세요. 책 144p 에"JPA 는 모든 엔티티에 일관된 방식으로 대리 키 사용을 권장한다비즈니스 요구사항은 계속해서 변하는데 테이블은 한 번 정의하면 변경하기 어렵다. 그런 면에서 외부 풍파에 쉽게 흔들리지 않는 대리 키가 일반적으로 좋은 선택이라 생각한다." 라는 내용이 있는데요.JPA 스펙이 이를 권장하는지의 여부가 궁금합니다. 위 문장이 "~라 생각한다." 라고 되어있어서, 이는 영한님의 생각이신건지 아니면 JPA 스펙에서 인용하신건지 헷갈려서 질문 드립니다.
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
table drop 관련해서 질문드립니다.
안녕하세요강의를 듣던 중에 기존에 작성했던 객체(Class)들이 변경돼서 코드를 수정하고 나서 동작이 이해가 안가는 부분이 있어서 질문드립니다.기존의 코드에서 Member 객체는 BaseEntity를 상속받는 상황이었는데 여기서 BaseEntity를 제거하고 다시 실행을 시켰습니다.제가 알기로 create 옵션을 사용하면 모든 Entity가 삭제되고 다시 생성하는 걸로 알고 있는데, 다시 실행해도 BaseEntity의 column들이 db에서 삭제되지 않고 상태를 유지하는 것을 봤습니다.왜 이런 현상이 나는지 궁금합니다.이 문제는 일단 h2 db에서 DROP TABLE 쿼리를 날려서 해결하긴 했습니다. 감사합니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
오류를 해결못하겠습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]여기에 질문 내용을 남겨주세요.이제 막 멤버만들어서 시작하는데 오류가 해결을 못하겠어요 자바버전이 높아서 그런건지... 자바 11써요 오류"C:\Program Files\Java\jdk-20\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.1.2\lib\idea_rt.jar=50553:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.1.2\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath C:\Users\ckehq\Desktop\Java_Spring\jpa\jpa-basic\target\classes;C:\Users\ckehq\.m2\repository\org\hibernate\hibernate-entitymanager\5.3.10.Final\hibernate-entitymanager-5.3.10.Final.jar;C:\Users\ckehq\.m2\repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;C:\Users\ckehq\.m2\repository\org\hibernate\hibernate-core\5.3.10.Final\hibernate-core-5.3.10.Final.jar;C:\Users\ckehq\.m2\repository\org\javassist\javassist\3.23.2-GA\javassist-3.23.2-GA.jar;C:\Users\ckehq\.m2\repository\antlr\antlr\2.7.7\antlr-2.7.7.jar;C:\Users\ckehq\.m2\repository\org\jboss\jandex\2.0.5.Final\jandex-2.0.5.Final.jar;C:\Users\ckehq\.m2\repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;C:\Users\ckehq\.m2\repository\javax\activation\javax.activation-api\1.2.0\javax.activation-api-1.2.0.jar;C:\Users\ckehq\.m2\repository\org\dom4j\dom4j\2.1.1\dom4j-2.1.1.jar;C:\Users\ckehq\.m2\repository\org\hibernate\common\hibernate-commons-annotations\5.0.4.Final\hibernate-commons-annotations-5.0.4.Final.jar;C:\Users\ckehq\.m2\repository\javax\persistence\javax.persistence-api\2.2\javax.persistence-api-2.2.jar;C:\Users\ckehq\.m2\repository\net\bytebuddy\byte-buddy\1.9.5\byte-buddy-1.9.5.jar;C:\Users\ckehq\.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\ckehq\.m2\repository\com\h2database\h2\2.2.220\h2-2.2.220.jar hellojpa.jpaMain8월 17, 2023 12:37:33 오후 org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformationINFO: HHH000204: Processing PersistenceUnitInfo [ name: hello ...]8월 17, 2023 12:37:33 오후 org.hibernate.Version logVersionINFO: HHH000412: Hibernate Core {5.3.10.Final}8월 17, 2023 12:37:33 오후 org.hibernate.cfg.Environment <clinit>INFO: HHH000206: hibernate.properties not foundException in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException at org.hibernate.boot.spi.XmlMappingBinderAccess.<init>(XmlMappingBinderAccess.java:43) at org.hibernate.boot.MetadataSources.<init>(MetadataSources.java:86) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:212) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:174) at org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:76) at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilder(HibernatePersistenceProvider.java:171) at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:119) at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:61) at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:50) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54) at hellojpa.jpaMain.main(jpaMain.java:10)Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ... 12 moreProcess finished with exit code 1pom.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>org.example</groupId> <artifactId>jpa-basic</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>20</maven.compiler.source> <maven.compiler.target>20</maven.compiler.target> </properties> <dependencies> <!-- JPA 하이버네이트 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>5.3.10.Final</version> </dependency> <!-- H2 데이터베이스 --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>2.2.220</version> </dependency> </dependencies></project>도와주세요
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
연관관계 주인 설정 관련질문
강의에서 외래키가 있는 쪽으로 연관관계의 주인을 설정하라고 들었는데,어노테이션을 보니 @OneToMany에만 mappedBy속성이 있고, @ManyToOne에는 mappedBy 속성이 없습니다. 보통 DB에서 외래키는 1:N관계에서 N쪽에서 가지고 있습니다. 그런데 @ManyToOne에 mappedBy가 없고 @OneToMany에만 mappedBy가 있다는 것은 JPA에서 외래키가 있는 방향으로만 연관관계 주인을 설정하도록 막아놓은건가요? 그리고 아직 속성값의 이름이 왜 mappedBy인지 잘 와닿지가 않습니다. members 필드는 단순히 team에 의해 맵핑만 당한다는 의미로 보면 되나요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
프로젝트 빌드 및 어노테이션 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]pom.xml을 작성하였고, META-INF도 작성하였습디ㅏ. 이제 Member를 만들어서 Entity 어노테이션을 붙이려고 하는데, 어노테이션이 뜨지 않습니다. 또한 우측 하단에 계속 Scanning files to index라고 뜨는데.. 어떻게 된 건지 알 수 있을까요??META-INF 입니다.<?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> <?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> <properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> </properties> <dependencies> <!-- JPA 하이버네이트 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>5.6.15.Final</version> </dependency> <!-- H2 데이터베이스 --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.4.200</version> </dependency> </dependencies> </project>pom.xml입니다. 자바 11로 진행중이며, 이에 맞게 hibernate와 h2 버전을 변경하였습니다. 우측 하단에 이런 식으로 계쏙 로딩도 되고요.. 왜그런걸까요??
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
실무에서 리퀴베이스나 플라이웨이를 사용하는지?
안녕하세요실무에서 db 스키마를 수정할때리퀴베이스를 사용하고 있습니다 그래서ddl-auto 를 이용하거나디비에서 직접 수정하는 방법은이력관리가 되지 않아서 지양하고관리 포인트를 리퀴베이스로만 하려고 하는데요어떤 방법은 좋은지 고민이 되네요 김영한님은 실무에서 어떤 기술로디비 스키마를 관리 하시는지 궁금합니다
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
Sequence 전략에서 Sequence정보를 어디에 저장하나요?
처음에는 MEMBER_SEQ를 영속성 컨텍스트의 어딘가... 에 저장할거 라고 생각했는데영속성 컨텍스트는 트랜잭션이 커밋될때 같이 종료되기 때문에, 그렇진 않을 것 같다는 생각이 들었습니다. 이러한 방식이면 트랜잭션마다 AllocationSize만큼의 빈 공간이 생기는 사태가 발생하니까요그냥 JPA 내부 Entity의 정보를 저장하는 어딘가에 MEMBER_SEQ도 저장되고, 'call next value for MEMBER_SEQ' 를 호출할 때 마다 같이 수정된다고 보면 되나요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
IDENTITY Batch Insert 쿼리
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요 강사님 덕분에 JPA를 재밌게 공부하고 있는 취준생입니다. Mysql에 Batch INSERT 쿼리에 대해 여쭤보고 싶습니다. Mysql은 시퀀스를 지원하지 않아 @GeneratedValue를 IDENTITY로 할 경우 PK때문에 INSERT가 한건씩 나가게 됩니다. 그동안 네이티브 쿼리를 사용했을 때는 배열 같은 형태로 여러 Row를 한 개의 INSERT로 처리하였는데 이 경우에도네이티브 쿼리가 실용적인 대안이 될 수 있을까요??Mysql에서 SEQUENCE 전략을 사용하면 PK 테이블을 생성 -> SELECT pk (비관적 락) -> UPDATE pk순으로 실행 되어 조금 더 찾아보니 allocateSize처럼 seq(pk) 뭉치로 가져 오는 방법이 있긴 한데 대부분의 경우 Native 쿼리로 푸는게 더 효율적이란 생각이 듭니다.혹시 이 밖에 더 괜찮은 방안이 있을까요?? 감사합니다!!