안녕하세요, 값 타입을 불변 객체를 만들 때 궁금한 점이 생겨 질문드립니다. 상황을 가정해서 질문드리겠습니다. 상황 값 타입을 불변 객체로 만들어서 값을 수정하기 위해, 새로운 불변 객체를 만들어 엔티티의 필드값을 변경합니다. 질문 위 상황에서 "JPA 관점에서는 어쨌든 컬럼값이 변경되어야 하니까 변경 감지는 계속 일어나고 있다." 처럼 이해해도 괜찮을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요. Order 검색 시에 OrderItems의 컬럼을 where절로 검색하고 싶으면 어떻게 해야 하나요?? 일단 Order를 조회하고 OrderItems를 default_batch_fetch_size 지연로딩으로 조회한 다음에 loop돌려서 직접 찾아야 하는지 아니면 querydsl을 배우면 방법이 있나요? 감사합니다!
문제 상황 안녕하세요, orphanRemoval = true 로 했을 때, delete 쿼리가 나가지 않는 오류가 있어 질문드리게 되었습니다. 실습에 사용한 코드는 아래와 같습니다. (import 문은 제거하였습니다.) @Entity public class Parent { @Id @GeneratedValue @Column(name = "PARENT_ID") private Long id; private String name; @OneToMany(mappedBy = "parent", orphanRemoval = true) private List<Child> childList = new ArrayList<>(); public void addChild(Child child) { this.childList.add(child); child.setParent(this); } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Child> getChildList() { return childList; } } @Entity public class Child { @Id @GeneratedValue private Long id; private String name; @ManyToOne @JoinColumn(name = "PARENT_ID") private Parent parent; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Parent getParent() { return parent; } public void setParent(Parent parent) { this.parent = parent; } } 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 { Child child1 = new Child(); Child child2 = new Child(); Parent parent = new Parent(); parent.addChild(child1); parent.addChild(child2); em.persist(parent); em.persist(child1); em.persist(child2); em.flush(); em.clear(); Parent findParent = em.find(Parent.class, parent.getId()); findParent.getChildList().remove(0); tx.commit(); } catch (Exception e) { tx.rollback(); } finally { em.close(); } emf.close(); } } 위의 JpaMain.main() 을 실행했을 때, 아래와 같은 로그가 나옵니다. (DDL 옵션은 create 입니다.) /Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/bin/java -javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=57639:/Applications/IntelliJ IDEA.app/Contents/bin -Dfile.encoding=UTF-8 -classpath /Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/charsets.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/ext/cldrdata.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/ext/dnsns.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/ext/jaccess.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/ext/jfxrt.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/ext/localedata.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/ext/nashorn.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/ext/sunec.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/ext/zipfs.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/jce.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/jfr.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/jfxswt.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/jsse.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/management-agent.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/resources.jar:/Users/preferkim/Library/Java/JavaVirtualMachines/corretto-1.8.0_362/Contents/Home/jre/lib/rt.jar:/Users/preferkim/IdeaProjects/inflearn-spring/hello-jpa/target/classes:/Users/preferkim/.m2/repository/org/hibernate/hibernate-entitymanager/5.3.10.Final/hibernate-entitymanager-5.3.10.Final.jar:/Users/preferkim/.m2/repository/org/jboss/logging/jboss-logging/3.3.2.Final/jboss-logging-3.3.2.Final.jar:/Users/preferkim/.m2/repository/org/hibernate/hibernate-core/5.3.10.Final/hibernate-core-5.3.10.Final.jar:/Users/preferkim/.m2/repository/org/javassist/javassist/3.23.2-GA/javassist-3.23.2-GA.jar:/Users/preferkim/.m2/repository/antlr/antlr/2.7.7/antlr-2.7.7.jar:/Users/preferkim/.m2/repository/org/jboss/jandex/2.0.5.Final/jandex-2.0.5.Final.jar:/Users/preferkim/.m2/repository/com/fasterxml/classmate/1.3.4/classmate-1.3.4.jar:/Users/preferkim/.m2/repository/javax/activation/javax.activation-api/1.2.0/javax.activation-api-1.2.0.jar:/Users/preferkim/.m2/repository/org/dom4j/dom4j/2.1.1/dom4j-2.1.1.jar:/Users/preferkim/.m2/repository/org/hibernate/common/hibernate-commons-annotations/5.0.4.Final/hibernate-commons-annotations-5.0.4.Final.jar:/Users/preferkim/.m2/repository/javax/persistence/javax.persistence-api/2.2/javax.persistence-api-2.2.jar:/Users/preferkim/.m2/repository/net/bytebuddy/byte-buddy/1.9.5/byte-buddy-1.9.5.jar:/Users/preferkim/.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:/Users/preferkim/.m2/repository/com/h2database/h2/1.4.199/h2-1.4.199.jar hellojpa.JpaMain Feb 10, 2023 12:19:21 PM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation INFO: HHH000204: Processing PersistenceUnitInfo [ name: hello ...] Feb 10, 2023 12:19:21 PM org.hibernate.Version logVersion INFO: HHH000412: Hibernate Core {5.3.10.Final} Feb 10, 2023 12:19:21 PM org.hibernate.cfg.Environment <clinit> INFO: HHH000206: hibernate.properties not found Feb 10, 2023 12:19:21 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit> INFO: HCANN000001: Hibernate Commons Annotations {5.0.4.Final} Feb 10, 2023 12:19:21 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!) Feb 10, 2023 12:19:21 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH10001005: using driver [org.h2.Driver] at URL [jdbc:h2:tcp://localhost/~/test] Feb 10, 2023 12:19:21 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH10001001: Connection properties: {user=sa} Feb 10, 2023 12:19:21 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH10001003: Autocommit mode: false Feb 10, 2023 12:19:21 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init> INFO: HHH000115: Hibernate connection pool size: 20 (min=1) Feb 10, 2023 12:19:21 PM org.hibernate.dialect.Dialect <init> INFO: HHH000400: Using dialect: org.hibernate.dialect.H2Dialect Feb 10, 2023 12:19:22 PM org.hibernate.cfg.AnnotationBinder processJoinedDiscriminatorProperties WARN: HHH000457: Joined inheritance hierarchy [hellojpa.domain.item.Item] defined explicit @DiscriminatorColumn. Legacy Hibernate behavior was to ignore the @DiscriminatorColumn. However, as part of issue HHH-6911 we now apply the explicit @DiscriminatorColumn. If you would prefer the legacy behavior, enable the `hibernate.discriminator.ignore_explicit_for_joined` setting (hibernate.discriminator.ignore_explicit_for_joined=true) Hibernate: drop table Album if exists Hibernate: drop table Book if exists Hibernate: drop table Child if exists Hibernate: drop table Item if exists Hibernate: drop table Locker if exists Hibernate: drop table Member if exists Hibernate: drop table Movie if exists Hibernate: drop table Parent if exists Hibernate: drop table Team if exists Hibernate: drop sequence if exists hibernate_sequence Hibernate: create sequence hibernate_sequence start with 1 increment by 1 Hibernate: create table Album ( artist varchar(255), ITEM_ID bigint not null, primary key (ITEM_ID) ) Hibernate: create table Book ( author varchar(255), isbn varchar(255), ITEM_ID bigint not null, primary key (ITEM_ID) ) Hibernate: 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, ITEM_ID bigint not null, name varchar(255), price integer not null, primary key (ITEM_ID) ) Hibernate: create table Locker ( LOCKER_ID bigint not null, name varchar(255), primary key (LOCKER_ID) ) Hibernate: create table Member ( MEMBER_ID bigint not null, createdBy varchar(255), createdDate timestamp, lastModifiedBy varchar(255), lastModifiedDate timestamp, USERNAME varchar(255), LOCKER_ID bigint, TEAM_ID bigint, primary key (MEMBER_ID) ) Hibernate: create table Movie ( actor varchar(255), director varchar(255), ITEM_ID bigint not null, primary key (ITEM_ID) ) Hibernate: create table Parent ( PARENT_ID bigint not null, name varchar(255), primary key (PARENT_ID) ) Hibernate: create table Team ( TEAM_ID bigint not null, createdBy varchar(255), createdDate timestamp, lastModifiedBy varchar(255), lastModifiedDate timestamp, name varchar(255), primary key (TEAM_ID) ) Hibernate: alter table Member add constraint UK_336xr48t7ci4jeiq7lt6xm2f4 unique (LOCKER_ID) Hibernate: alter table Album add constraint FK75mrpprv8oigh00y92tibw7id foreign key (ITEM_ID) references Item Hibernate: alter table Book add constraint FK2srbe8wjbanr4vtkrsb8atq7o foreign key (ITEM_ID) references Item Hibernate: alter table Child add constraint FKqtrfkxtu92rllepi09f1mwvls foreign key (PARENT_ID) references Parent Hibernate: alter table Member add constraint FK332130jlg9s5hyeuk7gfgi052 foreign key (LOCKER_ID) references Locker Feb 10, 2023 12:19:22 PM org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@55caeb35] 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. Feb 10, 2023 12:19:22 PM org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@3af37506] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode. Hibernate: alter table Member add constraint FKl7wsny760hjy6x19kqnduasbm foreign key (TEAM_ID) references Team Hibernate: alter table Movie add constraint FKqqwswm36y8uqoh9emtoruoxcv foreign key (ITEM_ID) references Item Feb 10, 2023 12:19:22 PM org.hibernate.tool.schema.internal.SchemaCreatorImpl applyImportSources INFO: HHH000476: Executing import script 'org.hibernate.tool.schema.internal.exec.ScriptSourceInputNonExistentImpl@36a7abe1' Hibernate: call next value for hibernate_sequence Hibernate: call next value for hibernate_sequence Hibernate: call next value for hibernate_sequence Hibernate: /* insert hellojpa.domain.cascade.Parent */ insert into Parent (name, PARENT_ID) values (?, ?) Hibernate: /* insert hellojpa.domain.cascade.Child */ insert into Child (name, PARENT_ID, id) values (?, ?, ?) Hibernate: /* insert hellojpa.domain.cascade.Child */ insert into Child (name, PARENT_ID, id) values (?, ?, ?) Hibernate: select parent0_.PARENT_ID as PARENT_I1_7_0_, parent0_.name as name2_7_0_ from Parent parent0_ where parent0_.PARENT_ID=? Hibernate: select childlist0_.PARENT_ID as PARENT_I3_2_0_, childlist0_.id as id1_2_0_, childlist0_.id as id1_2_1_, childlist0_.name as name2_2_1_, childlist0_.PARENT_ID as PARENT_I3_2_1_ from Child childlist0_ where childlist0_.PARENT_ID=? Feb 10, 2023 12:19:22 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl stop INFO: HHH10001008: Cleaning up connection pool [jdbc:h2:tcp://localhost/~/test] Process finished with exit code 0 질문 Q. 저는 Parent 에 orphanRemoval=true 로 설정되어있고, JpaMain.main() 에서 '부모 엔티티의 컬렉션에서 자식 엔티티의 참조를 제거' 하고 있으므로 당연히 DELETE 문이 나가야 하지 않나라고 생각했지만, 실제로는 DELETE 문이 나가지 않더라고요. 혹시 제가 잘못이해하고 있는 걸까요? Q. Parent 에 cascade = CascadeType.ALL 옵션을 추가하고 나면 DELETE 문이 정상적으로 나가는 것을 확인할 수 있었습니다. orphanRemoval=true 를 설정해주기만 DELETE 문이 나가야할 것 같은데, cascade = CascadeType.ALL 까지 추가해야 DELETE 문이 나가는 이유가 무엇인지 궁금합니다. 영한님과 서포터님들께 항상 감사드립니다.🙇♂️
spring.cloud openFeign ver 4.0.* 이상 쓰시는분들은 yml 세팅시 공식문서에 변경된 설정양식에 맞춰서 적용 하여야 합니다. https://docs.spring.io/spring-cloud-openfeign/docs/current/reference/html/
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
public void updateUser(UserUpdateRequest request) { User user = userRepository.findById(request.getId()) .orElseThrow(IllegalArgumentException::new); user.updateName(request.getName()); userRepository.save(user); } 안녕하세요. 강의를 듣다가 save() 메서드에 대해 궁금한 점이 있어서 작성하게 되었습니다. updateUser() 메서드에서 파라미터 id 값을 통해 해당되는 객체를 불러온 뒤, updateName() 메서드를 통해 이름을 변경한 다음, save() 메서드를 통해 저장한다고 이해했습니다. 여기서 save() 메서드를 통해 DB에 저장할 때 변경하기 이전에 저장했던 데이터의 id값이 겹치지 않고 실행이 되는건가요?
안녕하세요^^ 먼저 20만 수강생 축하드립니다. 영한님 JPA 복습 중에 질문드립니다. 지연로딩 설정시 프록시 객체를 조회하게 되는데 애플리케이션에서 실제 엔티티의 데이터가 필요하면 그때 프록시가 실제 엔티티를 호출하여 쿼리가 발생 하는 것으로 이해하고 있습니다. 제가 이해한게 맞을까요? 그리고 한번 지연 로딩으로 설정되었기 때문 에 실제 엔티티를 사용하고 다시 한번 해당 클래스를 호출 해도 프록시 객체가 호출되는것 이 맞는건가요? System.out.println("실제로 Team 엔티티를 사용하면?"); findMember.getTeam().getName(); System.out.println("후 findMember.getTeam()="+ findMember.getTeam().getClass()); 감사합니다.^^
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
안녕하세요 강의 잘 듣고 있습니다!! 강의를 듣다가 궁금해서 질문 남깁니다. Controller와 Service 연결할때와 Service와 Repository를 연결할때 사용하는 @Autowired는 사용하지 않아도 자동으로 연결이 되는건가요?? Service클래스와 Repository클래스 위에 @Service, @Repository 어노테이션을 사용할떄도 있고 이번 강의처럼 사용하지 않을떄도 있는데 아직까지 차이점을 모르겠습니다.
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
안녕하세요 선생님! 15강의 jdbcTemplate.query(readSql, (rs, rowNum) -> 0, request.getID()).isEmpty(); 위 문장에 대해서 질문이 있습니다! (rs, rowNum) -> 0 에서 rowNum이 무엇을 뜻하는 건지 알 수 있을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 다른건 다 잘 동작하는데 주문 내역 조회를 하면 Whitelabel Error Page This application has no configured error view, so you are seeing this as a fallback. Thu Feb 09 17:10:38 KST 2023 [80f6a090-2] There was an unexpected error (type=Internal Server Error, status=500). An error happened during template parsing (template: "class path resource [templates/order/orderList.html]") org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "class path resource [templates/order/orderList.html]") at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse( AbstractMarkupTemplateParser.java:241 ) Suppressed: The stacktrace has been enhanced by Reactor, refer to additional information below: Error has been observed at the following site(s): checkpoint ⇢ Handler jpaBook.jpaShop.controller.OrderController#orderList(OrderSearch, Model) [DispatcherHandler] checkpoint ⇢ HTTP GET "/orders" [ExceptionHandlingWebHandler] Original Stack Trace: at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse( AbstractMarkupTemplateParser.java:241 ) at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parseStandalone( AbstractMarkupTemplateParser.java:100 ) at org.thymeleaf.engine.TemplateManager.parseAndProcess( TemplateManager.java:666 ) at org.thymeleaf.TemplateEngine.process( TemplateEngine.java:1103 ) at org.thymeleaf.TemplateEngine.process( TemplateEngine.java:1077 ) at org.thymeleaf.spring6.SpringWebFluxTemplateEngine.lambda$createFullStream$0( SpringWebFluxTemplateEngine.java:198 ) at reactor.core.publisher.MonoCreate.subscribe( MonoCreate.java:58 ) at reactor.core.publisher.InternalMonoOperator.subscribe( InternalMonoOperator.java:64 ) at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext( MonoFlatMap.java:165 ) at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.complete( MonoIgnoreThen.java:292 ) at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onNext( MonoIgnoreThen.java:187 ) at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext( MonoIgnoreThen.java:236 ) at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete( MonoIgnoreThen.java:203 ) at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onComplete( MonoPeekTerminal.java:299 ) at reactor.core.publisher.MonoWhen$WhenCoordinator.signal( MonoWhen.java:211 ) at reactor.core.publisher.MonoWhen$WhenInner.onComplete( MonoWhen.java:427 ) at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onComplete( MonoPeekTerminal.java:299 ) at reactor.core.publisher.Operators$MonoSubscriber.complete( Operators.java:1840 ) at reactor.core.publisher.MonoCacheTime$CoordinatorSubscriber.signalCached( MonoCacheTime.java:337 ) at reactor.core.publisher.MonoCacheTime$CoordinatorSubscriber.onNext( MonoCacheTime.java:354 ) at reactor.core.publisher.FluxPeek$PeekSubscriber.onNext( FluxPeek.java:200 ) at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext( FluxSwitchIfEmpty.java:74 ) at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onNext( MonoPeekTerminal.java:180 ) at reactor.core.publisher.MonoPublishOn$PublishOnSubscriber.run( MonoPublishOn.java:181 ) at reactor.core.scheduler.SchedulerTask.call ( SchedulerTask.java:68 ) at reactor.core.scheduler.SchedulerTask.call ( SchedulerTask.java:28 ) at java.base/java.util.concurrent.FutureTask.run( FutureTask.java:264 ) at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run( ScheduledThreadPoolExecutor.java:304 ) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker( ThreadPoolExecutor.java:1136 ) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run( ThreadPoolExecutor.java:635 ) at java.base/java.lang.Thread.run( Thread.java:833 ) Caused by: org.attoparser.ParseException: Exception evaluating SpringEL expression: " item.member.name " (template: "order/orderList" - line 45, col 21) at org.attoparser.MarkupParser.parseDocument( MarkupParser.java:393 ) at org.attoparser.MarkupParser.parse( MarkupParser.java:257 ) at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse( AbstractMarkupTemplateParser.java:230 ) at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parseStandalone( AbstractMarkupTemplateParser.java:100 ) at org.thymeleaf.engine.TemplateManager.parseAndProcess( TemplateManager.java:666 ) at org.thymeleaf.TemplateEngine.process( TemplateEngine.java:1103 ) at org.thymeleaf.TemplateEngine.process( TemplateEngine.java:1077 ) at org.thymeleaf.spring6.SpringWebFluxTemplateEngine.lambda$createFullStream$0( SpringWebFluxTemplateEngine.java:198 ) at reactor.core.publisher.MonoCreate.subscribe( MonoCreate.java:58 ) at reactor.core.publisher.InternalMonoOperator.subscribe( InternalMonoOperator.java:64 ) at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext( MonoFlatMap.java:165 ) at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.complete( MonoIgnoreThen.java:292 ) at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onNext( MonoIgnoreThen.java:187 ) at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext( MonoIgnoreThen.java:236 ) at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete( MonoIgnoreThen.java:203 ) at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onComplete( MonoPeekTerminal.java:299 ) at reactor.core.publisher.MonoWhen$WhenCoordinator.signal( MonoWhen.java:211 ) at reactor.core.publisher.MonoWhen$WhenInner.onComplete( MonoWhen.java:427 ) at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onComplete( MonoPeekTerminal.java:299 ) at reactor.core.publisher.Operators$MonoSubscriber.complete( Operators.java:1840 ) at reactor.core.publisher.MonoCacheTime$CoordinatorSubscriber.signalCached( MonoCacheTime.java:337 ) at reactor.core.publisher.MonoCacheTime$CoordinatorSubscriber.onNext( MonoCacheTime.java:354 ) at reactor.core.publisher.FluxPeek$PeekSubscriber.onNext( FluxPeek.java:200 ) at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext( FluxSwitchIfEmpty.java:74 ) at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onNext( MonoPeekTerminal.java:180 ) at reactor.core.publisher.MonoPublishOn$PublishOnSubscriber.run( MonoPublishOn.java:181 ) at reactor.core.scheduler.SchedulerTask.call ( SchedulerTask.java:68 ) at reactor.core.scheduler.SchedulerTask.call ( SchedulerTask.java:28 ) at java.base/java.util.concurrent.FutureTask.run( FutureTask.java:264 ) at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run( ScheduledThreadPoolExecutor.java:304 ) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker( ThreadPoolExecutor.java:1136 ) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run( ThreadPoolExecutor.java:635 ) at java.base/java.lang.Thread.run( Thread.java:833 ) Caused by: org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: " item.member.name " (template: "order/orderList" - line 45, col 21) at org.thymeleaf.spring6.expression.SPELVariableExpressionEvaluator.evaluate( SPELVariableExpressionEvaluator.java:292 ) at org.thymeleaf.standard.expression.VariableExpression.executeVariableExpression( VariableExpression.java:166 ) at org.thymeleaf.standard.expression.SimpleExpression.executeSimple( SimpleExpression.java:66 ) at org.thymeleaf.standard.expression.Expression.execute( Expression.java:109 ) at org.thymeleaf.standard.expression.Expression.execute( Expression.java:138 ) at org.thymeleaf.standard.processor.AbstractStandardExpressionAttributeTagProcessor.doProcess( AbstractStandardExpressionAttributeTagProcessor.java:144 ) at org.thymeleaf.processor.element.AbstractAttributeTagProcessor.doProcess( AbstractAttributeTagProcessor.java:74 ) at org.thymeleaf.processor.element.AbstractElementTagProcessor.process( AbstractElementTagProcessor.java:95 ) at org.thymeleaf.util.ProcessorConfigurationUtils$ElementTagProcessorWrapper.process( ProcessorConfigurationUtils.java:633 ) at org.thymeleaf.engine.ProcessorTemplateHandler.handleOpenElement( ProcessorTemplateHandler.java:1314 ) at org.thymeleaf.engine.OpenElementTag.beHandled( OpenElementTag.java:205 ) at org.thymeleaf.engine.Model.process( Model.java:282 ) at org.thymeleaf.engine.Model.process( Model.java:290 ) at org.thymeleaf.engine.IteratedGatheringModelProcessable.processIterationModel( IteratedGatheringModelProcessable.java:368 ) at org.thymeleaf.engine.IteratedGatheringModelProcessable.process( IteratedGatheringModelProcessable.java:222 ) at org.thymeleaf.engine.ProcessorTemplateHandler.handleCloseElement( ProcessorTemplateHandler.java:1640 ) at org.thymeleaf.engine.TemplateHandlerAdapterMarkupHandler.handleCloseElementEnd( TemplateHandlerAdapterMarkupHandler.java:388 ) at org.thymeleaf.templateparser.markup.InlinedOutputExpressionMarkupHandler$InlineMarkupAdapterPreProcessorHandler.handleCloseElementEnd( InlinedOutputExpressionMarkupHandler.java:322 ) at org.thymeleaf.standard.inline.OutputExpressionInlinePreProcessorHandler.handleCloseElementEnd( OutputExpressionInlinePreProcessorHandler.java:220 ) at org.thymeleaf.templateparser.markup.InlinedOutputExpressionMarkupHandler.handleCloseElementEnd( InlinedOutputExpressionMarkupHandler.java:164 ) at org.attoparser.HtmlElement.handleCloseElementEnd( HtmlElement.java:169 ) at org.attoparser.HtmlMarkupHandler.handleCloseElementEnd( HtmlMarkupHandler.java:412 ) at org.attoparser.MarkupEventProcessorHandler.handleCloseElementEnd( MarkupEventProcessorHandler.java:473 ) at org.attoparser.ParsingElementMarkupUtil.parseCloseElement( ParsingElementMarkupUtil.java:201 ) at org.attoparser.MarkupParser.parseBuffer( MarkupParser.java:725 ) at org.attoparser.MarkupParser.parseDocument( MarkupParser.java:301 ) ... 32 more Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1021E: A problem occurred whilst attempting to access the property 'name': 'Unable to access property 'name' through getter method' at org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty( PropertyOrFieldReference.java:209 ) at org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal( PropertyOrFieldReference.java:104 ) at org.springframework.expression.spel.ast.PropertyOrFieldReference$AccessorLValue.getValue( PropertyOrFieldReference.java:405 ) at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal( CompoundExpression.java:92 ) at org.springframework.expression.spel.ast.SpelNodeImpl.getValue( SpelNodeImpl.java:112 ) at org.springframework.expression.spel.standard.SpelExpression.getValue( SpelExpression.java:338 ) at org.thymeleaf.spring6.expression.SPELVariableExpressionEvaluator.evaluate( SPELVariableExpressionEvaluator.java:265 ) ... 57 more Caused by: org.springframework.expression.AccessException: Unable to access property 'name' through getter method at org.springframework.expression.spel.support .ReflectivePropertyAccessor$OptimalPropertyAccessor.read( ReflectivePropertyAccessor.java:685 ) at org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty( PropertyOrFieldReference.java:204 ) ... 63 more Caused by: java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke( DirectMethodHandleAccessor.java:119 ) at java.base/java.lang.reflect.Method.invoke( Method.java:577 ) at org.springframework.expression.spel.support .ReflectivePropertyAccessor$OptimalPropertyAccessor.read( ReflectivePropertyAccessor.java:681 ) ... 64 more Caused by: org.hibernate.LazyInitializationException: could not initialize proxy [jpaBook.jpaShop.domain.Member#1] - no Session at org.hibernate.proxy.AbstractLazyInitializer.initialize( AbstractLazyInitializer.java:164 ) at org.hibernate.proxy.AbstractLazyInitializer.getImplementation( AbstractLazyInitializer.java:309 ) at org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor.intercept( ByteBuddyInterceptor.java:44 ) at org.hibernate.proxy.ProxyConfiguration$InterceptorDispatcher.intercept( ProxyConfiguration.java:102 ) at jpaBook.jpaShop.domain.Member$HibernateProxy$qF4ptgCa.getName(Unknown Source) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke( DirectMethodHandleAccessor.java:104 ) ... 66 more 이러한 오류가 뜹니다. orderList.html 에서 item.member.name 에 접근하려다가 오류가 나는 것 같은데 잘 모르겠어서 질문드립니다.
안녕하세요 비즈니스 메서드에 관해 궁금한 게 생겨서 질문드립니다. 강의 중에 엔티티를 변경할 때는 Setter대신 비즈니스 메서드를 별도 작성하여 제공하라고 해주셨는데 1) 등록이나 수정(save, update) 같은 것을 할 때 domain 쪽에 비즈니스 메서드를 작성하라는 뜻이 맞나요? 2) 구글링을 해보니 빌더 패턴, 정적펙토리 메소드 라는 기술도 존재하던데 비즈니스 메서드를 포함한 3가지는 궁극적으로 하는일이 비슷하다고 생각하는데 다른가요?
어떻게 실행해야되는지 모르겠습니다.. 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.
안녕하세요, JPA 강의 잘 듣고 있습니다. 실전예제2 실습을 진행하면서 아래와 같은 에러 메시지가 발생하였습니다. H2 데이터베이스에는, ORDER 테이블을 제외한 다른 테이블(+인덱스 포함) 및 시퀀스는 생성되었으며, ORDER 테이블만 생성되지 않았습니다. 코드 진행 시 어떤 실수를 했기에 발생한 문제인지 알 수 있을까요? 코드 압축파일도 첨부합니다. ( 링크 ) 2월 08, 2023 4:53:12 오후 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@40712ee9] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode. 2월 08, 2023 4:53:12 오후 org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleException WARN: GenerationTarget encountered exception accepting command : Error executing DDL " drop table ORDER if exists" via JDBC Statement org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL " drop table ORDER if exists" via JDBC Statement at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67) at org.hibernate.tool.schema.internal.SchemaDropperImpl.applySqlString(SchemaDropperImpl.java:375) at org.hibernate.tool.schema.internal.SchemaDropperImpl.applySqlStrings(SchemaDropperImpl.java:359) at org.hibernate.tool.schema.internal.SchemaDropperImpl.dropFromMetadata(SchemaDropperImpl.java:241) at org.hibernate.tool.schema.internal.SchemaDropperImpl.performDrop(SchemaDropperImpl.java:154) at org.hibernate.tool.schema.internal.SchemaDropperImpl.doDrop(SchemaDropperImpl.java:126) at org.hibernate.tool.schema.internal.SchemaDropperImpl.doDrop(SchemaDropperImpl.java:112) at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:144) at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:72) at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:310) at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:467) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:939) at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:56) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54) at jpabook.jpashop.JpaMain.main(JpaMain.java:12) Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "\000d\000a drop table [*]ORDER if exists"; expected "identifier"; SQL statement: drop table ORDER if exists [42001-214] at org.h2.message.DbException.getJdbcSQLException(DbException.java:502) at org.h2.message.DbException.getJdbcSQLException(DbException.java:477) at org.h2.message.DbException.getSyntaxError(DbException.java:261) at org.h2.command.Parser.readIdentifier(Parser.java:5656) at org.h2.command.Parser.readIdentifierWithSchema(Parser.java:5616) at org.h2.command.Parser.readIdentifierWithSchema(Parser.java:5645) at org.h2.command.Parser.parseDrop(Parser.java:2188) at org.h2.command.Parser.parsePrepared(Parser.java:776) at org.h2.command.Parser.parse(Parser.java:689) at org.h2.command.Parser.parse(Parser.java:661) at org.h2.command.Parser.prepareCommand(Parser.java:569) at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:631) at org.h2.server.TcpServerThread.process(TcpServerThread.java:288) 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:502) at org.h2.engine.SessionRemote.readException(SessionRemote.java:637) at org.h2.engine.SessionRemote.done(SessionRemote.java:606) at org.h2.command.CommandRemote.prepare(CommandRemote.java:78) at org.h2.command.CommandRemote.<init>(CommandRemote.java:50) at org.h2.engine.SessionRemote.prepareCommand(SessionRemote.java:480) at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1116) at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:237) at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:223) at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54) ... 15 more 2월 08, 2023 4:53:12 오후 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@34f392be] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode. 2월 08, 2023 4:53:12 오후 org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleException WARN: GenerationTarget encountered exception accepting command : Error executing DDL " create table ORDER ( ORDER_ID bigint not null, orderDate timestamp, status varchar(255), MEMBER_ID bigint, primary key (ORDER_ID) )" via JDBC Statement org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL " create table ORDER ( ORDER_ID bigint not null, orderDate timestamp, status varchar(255), MEMBER_ID bigint, primary key (ORDER_ID) )" via JDBC Statement at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67) at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlString(SchemaCreatorImpl.java: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 jpabook.jpashop.JpaMain.main(JpaMain.java:12) Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "\000d\000a create table [*]ORDER (\000d\000a ORDER_ID bigint not null,\000d\000a orderDate timestamp,\000d\000a status varchar(255),\000d\000a MEMBER_ID bigint,\000d\000a primary key (ORDER_ID)\000d\000a )"; expected "identifier"; SQL statement: create table ORDER ( ORDER_ID bigint not null, orderDate timestamp, status varchar(255), MEMBER_ID bigint, primary key (ORDER_ID) ) [42001-214] at org.h2.message.DbException.getJdbcSQLException(DbException.java:502) at org.h2.message.DbException.getJdbcSQLException(DbException.java:477) at org.h2.message.DbException.getSyntaxError(DbException.java:261) at org.h2.command.Parser.readIdentifier(Parser.java:5656) at org.h2.command.Parser.readIdentifierWithSchema(Parser.java:5616) at org.h2.command.Parser.readIdentifierWithSchema(Parser.java:5645) at org.h2.command.Parser.parseCreateTable(Parser.java:9253) at org.h2.command.Parser.parseCreate(Parser.java:6784) at org.h2.command.Parser.parsePrepared(Parser.java:763) at org.h2.command.Parser.parse(Parser.java:689) at org.h2.command.Parser.parse(Parser.java:661) at org.h2.command.Parser.prepareCommand(Parser.java:569) at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:631) at org.h2.server.TcpServerThread.process(TcpServerThread.java:288) 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:502) at org.h2.engine.SessionRemote.readException(SessionRemote.java:637) at org.h2.engine.SessionRemote.done(SessionRemote.java:606) at org.h2.command.CommandRemote.prepare(CommandRemote.java:78) at org.h2.command.CommandRemote.<init>(CommandRemote.java:50) at org.h2.engine.SessionRemote.prepareCommand(SessionRemote.java:480) at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1116) at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:237) at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:223) at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54) ... 15 more 2월 08, 2023 4:53:12 오후 org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleException WARN: GenerationTarget encountered exception accepting command : Error executing DDL " alter table ORDER add constraint FKg2e0q3p7qbn6vhhwweifmdmd5 foreign key (MEMBER_ID) references MEMBER" via JDBC Statement org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL " alter table ORDER add constraint FKg2e0q3p7qbn6vhhwweifmdmd5 foreign key (MEMBER_ID) references MEMBER" via JDBC Statement at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67) at org.hibernate.tool.schema.internal.SchemaCreatorImpl.applySqlString(SchemaCreatorImpl.java: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 jpabook.jpashop.JpaMain.main(JpaMain.java:12) Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "\000d\000a alter table [*]ORDER \000d\000a add constraint FKg2e0q3p7qbn6vhhwweifmdmd5 \000d\000a foreign key (MEMBER_ID) \000d\000a references MEMBER"; expected "identifier"; SQL statement: alter table ORDER add constraint FKg2e0q3p7qbn6vhhwweifmdmd5 foreign key (MEMBER_ID) references MEMBER [42001-214] at org.h2.message.DbException.getJdbcSQLException(DbException.java:502) at org.h2.message.DbException.getJdbcSQLException(DbException.java:477) at org.h2.message.DbException.getSyntaxError(DbException.java:261) at org.h2.command.Parser.readIdentifier(Parser.java:5656) at org.h2.command.Parser.readIdentifierWithSchema(Parser.java:5616) at org.h2.command.Parser.readIdentifierWithSchema(Parser.java:5645) at org.h2.command.Parser.parseAlterTable(Parser.java:8476) at org.h2.command.Parser.parseAlter(Parser.java:7548) at org.h2.command.Parser.parsePrepared(Parser.java:747) at org.h2.command.Parser.parse(Parser.java:689) at org.h2.command.Parser.parse(Parser.java:661) at org.h2.command.Parser.prepareCommand(Parser.java:569) at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:631) at org.h2.server.TcpServerThread.process(TcpServerThread.java:288) 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:502) at org.h2.engine.SessionRemote.readException(SessionRemote.java:637) at org.h2.engine.SessionRemote.done(SessionRemote.java:606) at org.h2.command.CommandRemote.prepare(CommandRemote.java:78) at org.h2.command.CommandRemote.<init>(CommandRemote.java:50) at org.h2.engine.SessionRemote.prepareCommand(SessionRemote.java:480) at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1116) at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:237) at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:223) at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54) ... 15 more 2월 08, 2023 4:53:12 오후 org.hibernate.tool.schema.internal.ExceptionHandlerLoggedImpl handleException WARN: GenerationTarget encountered exception accepting command : Error executing DDL " alter table ORDER_ITEM add constraint FK1pnpc71663ei4208mahu6w8os foreign key (ORDER_ID) references ORDER" via JDBC Statement org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL " alter table ORDER_ITEM add constraint FK1pnpc71663ei4208mahu6w8os foreign key (ORDER_ID) references ORDER" 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 jpabook.jpashop.JpaMain.main(JpaMain.java:12) Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "\000d\000a alter table ORDER_ITEM \000d\000a add constraint FK1pnpc71663ei4208mahu6w8os \000d\000a foreign key (ORDER_ID) \000d\000a references [*]ORDER"; expected "identifier"; SQL statement: alter table ORDER_ITEM add constraint FK1pnpc71663ei4208mahu6w8os foreign key (ORDER_ID) references ORDER [42001-214] at org.h2.message.DbException.getJdbcSQLException(DbException.java:502) at org.h2.message.DbException.getJdbcSQLException(DbException.java:477) at org.h2.message.DbException.getSyntaxError(DbException.java:261) at org.h2.command.Parser.readIdentifier(Parser.java:5656) at org.h2.command.Parser.readIdentifierWithSchema(Parser.java:5616) at org.h2.command.Parser.parseReferences(Parser.java:9180) at org.h2.command.Parser.parseTableConstraintIf(Parser.java:9114) at org.h2.command.Parser.parseAlterTable(Parser.java:8479) at org.h2.command.Parser.parseAlter(Parser.java:7548) at org.h2.command.Parser.parsePrepared(Parser.java:747) at org.h2.command.Parser.parse(Parser.java:689) at org.h2.command.Parser.parse(Parser.java:661) at org.h2.command.Parser.prepareCommand(Parser.java:569) at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:631) at org.h2.server.TcpServerThread.process(TcpServerThread.java:288) 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:502) at org.h2.engine.SessionRemote.readException(SessionRemote.java:637) at org.h2.engine.SessionRemote.done(SessionRemote.java:606) at org.h2.command.CommandRemote.prepare(CommandRemote.java:78) at org.h2.command.CommandRemote.<init>(CommandRemote.java:50) at org.h2.engine.SessionRemote.prepareCommand(SessionRemote.java:480) at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1116) at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:237) at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:223) at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54) ... 15 more 2월 08, 2023 4:53:12 오후 org.hibernate.tool.schema.internal.SchemaCreatorImpl applyImportSources INFO: HHH000476: Executing import script 'org.hibernate.tool.schema.internal.exec.ScriptSourceInputNonExistentImpl@12968227' 2월 08, 2023 4:53:12 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl stop INFO: HHH10001008: Cleaning up connection pool [jdbc:h2:tcp://localhost/~/test]