묻고 답해요
138만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바 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>
-
미해결실전! 스프링 데이터 JPA
영속성컨텍스트 질문 있습니다.!
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. @PersistenceContext(unitName="persistenceA") EntityManager emA @PersistenceContext(unitName="persistenceB") EntityManager emB @Transactional public void test(){ Team teamA = new Team(); team.serName("teamA") emA.persist(team); Member memberA = new Member(); member.setUsername("memberA"); member.setTeam(teamA); emA.persist(memberA); Member memberB = new Member(); member.setUsername("memberB"); emB.persist(memberB); }이런식으로 한 트랜잭션 내에서 두개의 엔티티매니저를 사용해서 저 로직을 돌리면 emB.persist()하는 부분에서넘어가지 않습니다. 다른 에러는 안나고 디버깅을 해보면 어느정도 구현체 내부 코드까지 쭉 들어가다 어느순간 멈추는데 이 경우는 어떤 것 때문에 이러는 걸까요?
-
해결됨자바 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()를 통해 영속컨택스트가 비워져서, 시퀀스값도 지워졌을 거라고 생각했습니다.
-
미해결실전! Querydsl
동적 쿼리
Where 절에서 동적 쿼리를 작성할 수 있듯이, orderBy 절에서도 동적쿼리를 작성해도 괜찮나요 ?근데 orderBy 절은 null이 되면 안될 것 같은데 이런 경우에 동적으로 어떻게 해야하는지 궁금합니다. 또 실무에서는 where절과 order절 모두 동적 쿼리를 자주 사용하는지 궁금합니다
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
@NotEmpty관련 질문입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 현재 상태입니다. 멤버폼에서 임포트문을 직접 추가를 해줘도 불러올수없다고 뜹니다. 다른분들이 질문하신 내용을 봐도 다 디펜던시에 추가하라고 되어 있더라구요. 구글링도해보고 GPT도 찾아봤는데 다른곳에서 문제가 생긴건지 임포트가 안됩니다. 터미널에서 gradle clean하고 다시 gradle build를 해도 임포트가 안되는건 똑같습니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
ex1-hello-jpa 프로젝트 소스 코드 공유 문의
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]해당 강의의 ex1-hello-jpa 프로젝트 소스 코드가 다 날라갔는데, 혹시 github이나 다른 공유 사이트에서 소스 코드를 받아 볼 수 있을까요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
SpringBoot 3점대 버전 Spring Security 설정
Spring Security 가 3점대 버전으로 오면서 상당한 변화가 있습니다. 강의 내용을 따라 하다보니 순환참조나, 현재는 지원하지 않는 기능이 상당수 존재하였습니다. 현재 작업한 코드가 문제 해결에 많은 도움이 되면 좋겠어서 글을 첨부합니다. SecurityConfig.class 입니다.@Configuration @EnableWebSecurity @RequiredArgsConstructor public class SecurityConfig{ private final CustomAuthenticationManager customAuthenticationManager; private final UserFindPort userFindPort; private final Environment environment; @Bean public WebSecurityCustomizer webSecurityCustomizer() { return (web) -> web.ignoring(). requestMatchers(new AntPathRequestMatcher("/h2-console/**")) .requestMatchers(new AntPathRequestMatcher( "/favicon.ico")) .requestMatchers(new AntPathRequestMatcher( "/css/**")) .requestMatchers(new AntPathRequestMatcher( "/js/**")) .requestMatchers(new AntPathRequestMatcher( "/img/**")) .requestMatchers(new AntPathRequestMatcher( "/lib/**")); } @Bean protected SecurityFilterChain filterChain(HttpSecurity http, HandlerMappingIntrospector introspector) throws Exception { http.csrf(AbstractHttpConfigurer::disable); http.authorizeHttpRequests(authorize -> authorize.requestMatchers(new MvcRequestMatcher(introspector, "/**")).permitAll() // requestMatchers(new MvcRequestMatcher.Builder(introspector).pattern(HttpMethod.GET, "/users/**")).permitAll() // .requestMatchers(new MvcRequestMatcher(introspector, "/greeting")).permitAll() // .requestMatchers(new MvcRequestMatcher(introspector, "/welcome")).permitAll() // .requestMatchers(new MvcRequestMatcher(introspector, "/health-check")).permitAll() // .requestMatchers(new MvcRequestMatcher.Builder(introspector).pattern(HttpMethod.POST, "/users")).permitAll() .anyRequest() .authenticated()) .addFilter(getAuthenticationFilter()) .httpBasic(Customizer.withDefaults()); return http.build(); } private AuthenticationFilter getAuthenticationFilter() { return new AuthenticationFilter(customAuthenticationManager, userFindPort, environment); } }requestMatcher에서 AntPathRequestMatcher, MvcRequestMatcher에 관한 설명은부족하지만 https://velog.io/@dktlsk6/Spring-Security-RequestMatcher에서 확인 가능하십니다. CustomUserDetailService.class 입니다. 순환참조 문제가 발생하여 강의와 달리 새로 CustomService를 생성하여 implements 하였습니다.@Component @RequiredArgsConstructor public class CustomUserDetailService implements UserDetailsService { private final UserFindPort userFindPort; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { UserDto userByEmail = userFindPort.findUserByEmail(username); if (userByEmail == null) { throw new UsernameNotFoundException("User Not Found"); } return new User(userByEmail.getEmail(), userByEmail.getEncPasswd(), true, true, true, true, new ArrayList<>()); } } CustomAuthenticationManager.class 입니다. AuthenticationFilter의 AuthenticationManager로 사용할 것입니다.@Component @RequiredArgsConstructor @Slf4j public class CustomAuthenticationManager implements AuthenticationManager { private final CustomUserDetailService customUserDetailService; @Bean protected PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } @Override public Authentication authenticate(Authentication authentication) throws AuthenticationException { UserDetails userDetails = customUserDetailService.loadUserByUsername(authentication.getName()); if (!passwordEncoder().matches(authentication.getCredentials().toString(), userDetails.getPassword())) { throw new BadCredentialsException("Wrong password"); } return new UsernamePasswordAuthenticationToken(userDetails.getUsername(), userDetails.getPassword(), userDetails.getAuthorities()); } } AuthenticationFilter.class 입니다. 해당 부분은 강의와 차이점이 없습니다.@Slf4j public class AuthenticationFilter extends UsernamePasswordAuthenticationFilter { private final UserFindPort userFindPort; private final Environment environment; public AuthenticationFilter(AuthenticationManager authenticationManager, UserFindPort userFindPort, Environment environment) { super.setAuthenticationManager(authenticationManager); this.userFindPort = userFindPort; this.environment = environment; } @Override public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException { try { LoginRequestDto creds = new ObjectMapper().readValue(request.getInputStream(), LoginRequestDto.class); UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(creds.getEmail(), creds.getPassword(), new ArrayList<>()); return getAuthenticationManager().authenticate(token); } catch (IOException e) { throw new RuntimeException(e); } } @Override protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain, Authentication authResult) throws IOException, ServletException { String username = authResult.getName(); UserDto user = userFindPort.findUserByEmail(username); if (user == null) { throw new UsernameNotFoundException(username); } log.debug("user id {}", user.getUserId()); String token = Jwts.builder() .setSubject(user.getUserId()) .setExpiration(new Date(System.currentTimeMillis() + Long.parseLong(environment.getProperty("token.expiration.time")))) .signWith(SignatureAlgorithm.HS512, environment.getProperty("token.secret")) .compact(); response.addHeader("token", token); response.addHeader("userId", user.getUserId()); } } 아래는 실제 결과입니다.404가 뜨는 이유는 login 성공시 redirect url을 설정해주지 않아서 /(루트) 경로로 이동해서입니다. 해당 경로와 매핑되는 resource나 api가 없기 때문에 해당 오류가 발생한것이므로 정상작동으로 생각하시면 됩니다.아래는 잘못된 정보를 기입하여 실패 테스트 입니다. 추후 강의를 들으며 업데이트 하도록 하겠습니다.
-
해결됨자바 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에 반영되는 건가요?
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
토이프로젝트 깃헙 링크 어디있나요?
섹션 21부 실기 수업 - 어쨌든 테스트 코드에서 사용하는 기존 프로젝트 위치가 혹시 어디 있나요?
-
미해결자바 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을이용하여 일을저장할때 다를 저장하는 경우는 어느상황일때하는건가요??
-
미해결실전! Querydsl
countQuery 최적화 질문
countQuery관련해서 궁금한 것이 있습니다.@Override public Page<ReportChangeKRWDto> search(ReportSearchRequestDto dto, Pageable pageable) { List<ReportChangeKRWDto> content = queryFactory .select(new QReportChangeKRWDto( reportChange.id.intValue(), //번호는 일단 임의로 reportChange.referenceDate, reportChange.changeAmount, reportChange.beforeAsset, reportChange.changeRatio, reportChange.afterAsset) ) .where(searchType(dto)) .from(reportChange) .orderBy(sortCondition(dto)) .offset(pageable.getOffset()) .limit(10) //TOP 10 고정 .fetch(); //countQuery 따로 JPAQuery<Long> countQuery = queryFactory .select(reportChange.count()) .from(reportChange) .where(searchType(dto)) .orderBy(sortCondition(dto)); // .offset(pageable.getOffset()) // .limit(10); return PageableExecutionUtils.getPage(content, pageable, countQuery::fetchOne); }여기서 countQuery를 통해 최적화 하고 싶다면 countQuery부분에는 offset, limit을 빼고 쿼리?부분들만 적용해야 하는건가요 ??
-
미해결[초급] 찍어먹자! 코틀린과 Spring Security + JWT로 회원가입 만들기
loginId는 왜 변경이 안될까요?
기존에 있던 정보를 삭제하고 새로 추가할경우엔 잘 동작하는데강의와 같이 업데이트할땐 loginId 변경이 안되네요..!
-
해결됨실전! 스프링 데이터 JPA
섹션 5 사용자 정의 레포지토리 구현 질문드립니다.
기본적인 java 개념 부족일수도 있습니다만강의 내용중에 사용자 정의레포지를 만들땐 Impl을 뒤에 꼭 붙여야 한다고 나와있고, 최신화된 강의내용을 봐도 그렇게 알고있는데요,그런데 이게 왜 Spring Data JPA에서 제공해야하는 기능인지 이해가 잘 안갑니다. Spring Data JPA가 지원을 안해주면 왜 오류를 뱉어야 하는지가 궁금합니다. 예를들어public interface RepositoryAInterface 와이를 구현한public class RepositoryA implements RepsitoryAInterface가 있다고 했을때,그리고 RepositoryA를 JPA을 이용하여 구현할때,EntityManager를 DI해서 직접 구현 하잖아요?그럼 끝난거 아닌가요? Spring Data JPA를 사용하는public interface RepositoryBInterface extends JPARepository<>가있다고 하면요.여기서 extends RepositoryA를 하나 추가했다고 해서 왜 에러가 나는 것인가요?그냥 이게 Spring Data JPA가 아니라 일반적인 java라고 생각해봤을때RepositoryBInterface가 있고, 이 인터페이스는RepositoryAinterface를 extends하였고,RepositoryAinterface는 Repository가 구현하고있으니RepositoryBInterface만 구현하면 되는거 아닌가요?그리고 이것은 SpringDataJpa가 해주고요Spring Data Jpa가 RepositoryAinterface에 대해 근본적으로 왜 알아야하는 궁금합니다. 근데 알아야 하니까 Impl을 붙어야 작동하겠죠?만약에 Impl이 없으면 어떠한 동작과정중에 에러가 생겨 동작을 제대로 하지 않는 것일까요..?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
3강 Spring Cloud Gateway - Custom Filter 적용 Bean 관련 질문있습니다.
안녕하세요 수업 잘 듣고 있습니다. 수업중 내용에 관해서 질문이 있어서 질문을 남깁니다. 수업 5분50초쯤에 Gateway Filter를 Bean으로 하나 등록한다고 하셨는데 @Component어노테이션이 붙은 클래스의 아래의 메소드의 반환값은 자동으로 Bean으로 등록되나요? @Bean어노테이션을 붙여줘야 등록이되는 줄 알았는데 제가 잘못이해하고있었는지 궁금해서 질문을 남깁니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Junit5에서는 fail 없이 사용해도 되나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Junit5는 expected말고 assertThrows를 사용하는데 fail하고 같이 사용하면 assertThrows에서 예외가 터져도 fail문도 같이 실행되서 테스트 녹색불이 안들어오더라고요 반대로 fail문을 사용하지 않으면 녹색불이 들어오고요 어떻게 하는게 맞나요?
-
해결됨실전! Querydsl
영속성 콘텍스트의 범위.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요.영속성콘텍스트에 영속화된 Entity 로 생각이 드는데도 불구하고 영속성 콘텍스트가 아니고 쿼리의 호출결과로 데이터를 얻어오는 부분이 있어서 질문을 드립니다.테스트 코드는 아래와 같습니다.참고: boardId = boardEntity @Id@Transactional public BoardDto updateBoard(Integer boardId, String title) { jBoardEntity entity = jpaQueryFactory.selectFrom(boardEntity).where(boardEntity.baordId.eq(boardId)).fetchOne(); entity.updateTitle(title); entityManagerFactory.getPersistenceUnitUtil().isLoaded(entity) // true return jpaQueryFactory.selectFrom(boardEntity).where(boardEntity.baordId.eq(boardId)).fetchOne(); }에서 처음 selectFrom 때 select 쿼리후 entity 정상반환하여 영속회되고 update title 문까지 정상동작합니다.이후 영속성 콘텍스트에 로드가 됐다는걸 확인해보았고 동일한 ID 의 entity 를 조회했을때는 영속성 컨텍스트에서 제공되길 기대했으나 console 로그에는 sql 이 나가는 것으로 보아 실제 db 에 sql 이 작동한것으로 보입니다.혹시 제가 놓친 부분이있다면 말씀해주시면 감사하겠습니다.
-
미해결실전! 스프링 데이터 JPA
2023년 9월 기준 p6spy dependency 추가
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.6.2 spring boot 2.7.15 기준으로 p6spy dependency 추가 중 반영이 안되어 찾아보니 1.6.2으로 하면 적용되네요학습하시는 분들 참고하시면 될 것 같습니다.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
서버 배포 했는데 사이트에 보안 연결이 안되네요
배포까지 완료해서 인바운드 규칙 하라는대로 제대로 설정하고 사이트에 접속했는데 사이트에 보안 연결할 수 없음이라고 뜨네요 보니까 스프링 부트는 잘 실행되고 제대로 서버가 열린것은 맞습니다 터미널에 제가 https://52.79.237.17:8080/v1/index.html 이런식으로 입력하였을 경우에 2023-09-17 11:14:48.397 INFO 35174 --- [nio-8080-exec-1] o.apache.coyote.http11.Http11Processor : Error parsing HTTP request header Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.java.lang.IllegalArgumentException: Invalid character found in method name [0x160x030x010x020x000x010x000x010xfc0x030x030x14k0x8a0xdc%0xdc0xf60xcdv]e0x88<0xce0xf0k]0x9at0x9f3af0x1b0x8bi0x060xe160xd1_0xa2 ]. HTTP method names must be tokens at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:419) ~[tomcat-embed-core-9.0.69.jar!/:na] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:271) ~[tomcat-embed-core-9.0.69.jar!/:na] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.69.jar!/:na] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:891) ~[tomcat-embed-core-9.0.69.jar!/:na] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1784) ~[tomcat-embed-core-9.0.69.jar!/:na] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.69.jar!/:na] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.69.jar!/:na] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.69.jar!/:na] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.69.jar!/:na] at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na]이러한 문구들이 출력됩니다 어떻게 해결해야하나요