30%
61,600원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
적절한 예외를 어떻게 찾아야 할까요?
안녕하세요.강의를 들으면서 생각해보니 나중에 개인 프로젝트를 진행하면서강의에서 배우고 있는 IllegalStateException이나 NotEnoughStockException 외에도적절한 exception 클래스를 찾아서 터트려야 할 때가 생길 것 같은데그 exception들의 종류를 어떻게 공부해야 할까요?다양한 예외 클래스들을 보니 신기하면서도 감이 안잡혀 질문하게 됐습니다..!
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문 검색 기능 개발에서 hasText 오류가 납니다
강의 코드 그대로 따라 했는데 자꾸 hasText오류가 납니다빌드를 다시한다.캐시를 비우고 재실행한다.Gradle을 Refresh 해준다.Gradle 빌드 설정을 IntelliJ IDEA로 바꿔준다.IDE를 최신버전으로 업데이트 한다.5개 다해도 안되는데요 어떻게 해야 되죠?선생님들 살려주세요!!
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
강의 도중 말씀에 대한 간단한 질문
안녕하세요 강사님! 수업 너무 잘 듣고 있습니다. 다름이 아니라 설명하시는 도중18:20 가량 부터 잠깐 하시는 말씀에 대해 조금 이해가 덜 된 것 같아서 질문을 좀 드리고 싶어서 글을 남기게 되었습니다. 1. 설계하고 돌려서 테이블 생성된 것을 보고 원하는 대로 만들어졌는지 확인하는 것을 반복하라>> DB 테이블에 칼럼들 들어간 모습들과 내가 원하는대로 들어갔는지 확인하면서 해라! 라는 말씀으로 이해하면 되는 걸까요?2. 생성된 것을 그대로 쓰면 안된다(?)>> 제가 실무를 혼자서 진행해보고 DBA 분들과 얘기를 해본적이 없어서 이해가 잘 안됐을 수도 있는데, 혹시 이부분에서 말씀하시는 그대로 쓰면 안된다는게 어떤 부분인지 조금 더 말씀해주실 수 있을까요? Script 란 DB sql 들어가는 글들을 말씀하시는 것 같은데, 해당 SQL 을 따로 뽑아서 한번 쭉 본 후에 JPA DDL-AUTO 기능을 사용하지 말고 직접 DB workspace 같은 공간에 직접 import 를 해주는 방식으로 하라는 말씀이실까요?도움주셔서 감사합니다!
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
강의 도중 가끔 기본편 언급하시는데 기본편이 어떤건가요?
로드맵에서 자바 ORM 표준 JPA 프로그래밍 - 기본편이거 맞나요? 이거 맞으면 구매하려 합니다
- 해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
안녕하세요. 스프링 정복 로드맵 db2편까지 완강하고 수강하는 학생입니다.
스프링 정복 로드맵 2편까지 완강 후 jpa 활용 1편을 듣고 있는데요.아무래도 시간이 좀 지난 강의라 db2편에서 들었던 jpa와 jpa 활용에서 듣는 jpa간에 셋팅이 다른 점이 있는데요.(entitymanager에 @persistencecontext 를 달아주시거나, 테스트하시면서 resources에 schema 를 설정하시는 대신 spring.jpa.hibernate.ddl-auto=create 를 설정하시는 등)db2편이 최신이므로, db2편을 기준으로 확장해나가는 편이 나은지 혹은 jpa shop에서 하시는 것을 새로이 기준으로 하면 좋을지 여쭤봅니다!별개로 강의는 항상 잘 듣고 있습니다.감사합니다!
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
DB를 변경해도 테이블이 생성되는 건가요?
DB를 h2말고 MySQL로 설정해도 테이블이 생성되는건가요?
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
타입 Address의 depricated
'엔티티 클래스 개발1' 강의영상을 보며 실습하다가 생긴 문제입니다. 위 사진과 같이 Address 타입이 depricated된다는 듯한데 이 경우 @Embedded 와 같은 어노테이션은 쓰이지 않게 되는 걸까요?
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
중복회원조회 메소드에 @Rollback(value = false)를 붙혔을때 롤백되는 현상
안녕하세요, 강의를 잘 듣고 있는 학생입니다.다름이 아니라 @Rollback(value = false)을 @Transactional을 붙힌 클래스 안 메소드에 붙히면, 기본적으로 롤백이 되어 db에 쿼리를 날리지 않는것이 쿼리를 날려 커밋된다고 말씀하셨는데,회원가입 메소드에서는 잘 커밋되어 db에서도 select문을 통해 확인할 수 있었습니다.하지만 중복 회원 조회 메소드에도 똑같이 @Rollback(value = false) 메소드를 붙혔는데, 아래와 같은 예외가 발생했습니다.org.springframework.transaction.UnexpectedRollbackException: Transaction silently rolled back because it has been marked as rollback-only구글링을 했는데도 잘 모르겠어서 글 남깁니다.@Transactional안에서 예외가 발생하면 일단 rollback이 되는건지,그것을 try catch로 해결했는데도 rollback이 되는건지 궁금합니다.
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberServiceTest
질문글 참고해서 작성해보았는데 계속 에러가 뜹니다. 무엇이 문제일까요?특히 중복회원예외 => assertThrows에서 노란 점선줄이 뜨고 assertThat에서 빨간색 글씨가 됩니다.package jpabook.jpashop.service; import jpabook.jpashop.domain.Member; import jpabook.jpashop.repository.MemberRepository; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.transaction.annotation.Transactional; import javax.persistence.EntityManager; import static org.junit.jupiter.api.Assertions.assertThrows; @SpringBootTest @Transactional // 이게 있어야 롤백이 됨 class MemberServiceTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Autowired EntityManager em; @Test public void 회원가입() throws Exception { // given => 이렇게 주어졌을 때 Member member = new Member(); member.setName("kim"); // when => 이렇게 하면 Long saveId = memberService.join(member); // then => 이렇게 된다. 검증해라 em.flush(); // db에 반영됨 + @Transactional때문에 롤백도 됨 => DB에 데이터가 남으면 안되므로 Assertions.assertEquals(member, memberRepository.findOne(saveId)); } @Test public void 중복_회원_예외() throws Exception { // given Member member1 = new Member(); member1.setName("Kim"); Member member2 = new Member(); member2.setName("kim"); // when memberService.join(member1); IllegalStateException e = Assertions.assertThrows(IllegalStateException.class, () -> { memberService.join(member2); }); //memberService.join(member2); // 예외가 발생해야 한다!!! // then Assertions.assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); } }
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계 메서드
왜 연관관계 메서드에서 어떤 건 set이라고 하고 어떤 건 add라고 하나요??ex. setMember() / addOrderItem() //== 연관관계 메서드 ==// public void setMember(Member member) { this.member = member; member.getOrders().add(this); } public void addOrderItem(OrderItem orderItem) { orderItems.add(orderItem); orderItem.setOrder(this); } public void setDelivery(Delivery delivery) { this.delivery = delivery; delivery.setOrder(this); }setMember는 member.getOrders()라고 하고 setDelivery()는 setOrders()로 다른 이유는 무엇인가요?? 여기서 this는 order를 의미하는 걸까요??
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
클래스 내부에서 getter/setter 메서드 사용
안녕하세요. 영한님과 서포터님들 덕분에 즐겁게 공부하고 있습니다.주문, 주문상품 엔티티 개발 강의를 듣던 중 궁금한 것이 생겼습니다. 강의에서 보시면 클래스 내부에서 생성 메서드 혹은 비즈니스 로직 메서드를 구현하시면서 getter/setter 메서드를 사용하시는데요.이렇게 클래스 내부에서 사용할 때도 필드에 직접 접근하는 것보다는 getter/setter 메서드를 사용하는 것이 권장되는가요?단순히 생각했을 때는 불필요한 메서드 호출만 일어나는 것 아닌가해서 질문드립니다.
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계 매핑 분석
회원과 주문에서 일대다, 다대일의 양방향 관계라고 하셨는데 일대다, 다대일이 다른 말인가요??아니면 M:N관계라는 뜻인가요?
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
orderForm Post
질문1.orderForm을 Post로 보냈는데 왜 content type이 text/html 인가요?? application/x-www-form-urlencoded 아닌가요? 그리고 Form 데이터는 어디있나요 보이지 않습니다.2.@RequestParam은 form형식의 데이터나 url형식으로 받아야하는데 어떻게 "memberId"처럼 필드값을 바로 받을 수 있나요?? 구글링을 해봐도 잘 안나옵니다. 혹시 키워드 가르쳐주시면 직접 찾아보겠습니다. Controller@PostMapping("/order") public String order(@RequestParam("memberId") Long memberId, @RequestParam("itemId") Long itemId, @RequestParam("count") int count){ orderService.order(memberId, itemId, count); return "redirect:/orders"; }
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
dto 설계시 궁금증
위와같이 Form의 필드가 4개라고 했을 때각각을 입력하거나 입력하지 않는 경우 총 2^4 = 16개입니다.그렇다고 하면 dto에 입력 경우의 수에 따른 변경감지 로직을 총 16개 작성해 두어야하는건가요? 어떻게 설게를 해야하는지 궁금합니다.
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
createMember, createItem 메서드
테스트 클레스에createMember, createBook 메서드를 만들었는데이걸 domian에 생성하고기본 생성자를 protect로 만들어놓으면OrderItem에서 했던 방식처럼더 나은 방식인건가요??
- 해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
/orders에서 화이트라벨페이지가 뜹니다..
짧은 지식으로 추측컨데,html파일에 문제가 있는것으로 판단해 몇차례 확인 후 복붙을 시도해보았습니다매핑을 잘못한것인가 컨트롤러도 수차례 확인하였고...혹시 관련된 비지니스로직에서 데이터를 잘못 불러오는것인지,,데이터를 백업해두고,강의 초반에 있는 소스코드를 통해java 부분과 templates을 통채로 복사해보았음에도, 해결이 되지 않습니다.최대한 혼자서 해결하려 했으나... 도저히 해결방안이 떠오르지 않아서 질문드립니다.어째서 이러한 문제가 발생하는것일까요...?ㅜㅜ하단에 구글드라이브 링크 첨부해두었습니다. 도와주세요...ㅠㅠ야생형 코스로 활용 -> 기본 -> 활용 단계로 복습하는 시점이라..(1회차에선 멀쩡히 넘겼던 부분을 2회차때 도저히 못고치는 기현상...... ㅜㅜ)아티펙트, 그룹명이 jpabook2 , jpashop2 로 설정되어 있습니다. 이점 양해 부탁드립니다..https://drive.google.com/file/d/1gY3cQKM2yq8SsObwAMAbk3gKOScsx6Jp/view?usp=sharing
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberRepositoryTest 오류
spring: datasource: url: jdbc:h2:tcp://localhost/~/jpashop username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: #show_sql: true format_sql: true logging.level: org.hibernate.SQL: debug제가 application.yml에 작성한 코드입니다. 현재 아래와 같은 에러가 나고 있습니다.could not prepare statement; SQL [call next value for hibernate_sequence]; nested exception is org.hibernate.exception.SQLGrammarException: could not prepare statementorg.springframework.dao.InvalidDataAccessResourceUsageException: could not prepare statement; SQL [call next value for hibernate_sequence]; nested exception is org.hibernate.exception.SQLGrammarException: could not prepare statement at app//org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:259) at app//org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:233) at app//org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:551) at app//org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61) at app//org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:242) at app//org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:152) at app//org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at app//org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) at app//org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) at app//jpabook.jpashop.MemberRepository$$EnhancerBySpringCGLIB$$473a0eb7.save(<generated>) at app//jpabook.jpashop.MemberRepositoryTest.testMember(MemberRepositoryTest.java:24) at java.base@11.0.15/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base@11.0.15/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base@11.0.15/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base@11.0.15/java.lang.reflect.Method.invoke(Method.java:566) at app//org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725) at app//org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) at app//org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) at app//org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) at app//org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) at app//org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) at app//org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) at app//org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) at app//org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) at app//org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:214) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:210) at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:135) at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:66) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at app//org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at java.base@11.0.15/java.util.ArrayList.forEach(ArrayList.java:1541) at app//org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at app//org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at java.base@11.0.15/java.util.ArrayList.forEach(ArrayList.java:1541) at app//org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at app//org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at app//org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) at app//org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) at app//org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:107) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53) at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:99) at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:79) at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:75) at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:61) at java.base@11.0.15/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base@11.0.15/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base@11.0.15/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base@11.0.15/java.lang.reflect.Method.invoke(Method.java:566) at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94) at com.sun.proxy.$Proxy2.stop(Unknown Source) at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:193) at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129) at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100) at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60) at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:133) at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71) at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)Caused by: org.hibernate.exception.SQLGrammarException: could not prepare statement at app//org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:63) at app//org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:37) at app//org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113) at app//org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:186) at app//org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareStatement(StatementPreparerImpl.java:75) at app//org.hibernate.id.enhanced.SequenceStructure$1.getNextValue(SequenceStructure.java:105) at app//org.hibernate.id.enhanced.NoopOptimizer.generate(NoopOptimizer.java:40) at app//org.hibernate.id.enhanced.SequenceStyleGenerator.generate(SequenceStyleGenerator.java:534) at app//org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:115) at app//org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:185) at app//org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:128) at app//org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:55) at app//org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:107) at app//org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:756) at app//org.hibernate.internal.SessionImpl.persist(SessionImpl.java:742) at java.base@11.0.15/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base@11.0.15/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base@11.0.15/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base@11.0.15/java.lang.reflect.Method.invoke(Method.java:566) at app//org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:311) at app//com.sun.proxy.$Proxy96.persist(Unknown Source) at app//jpabook.jpashop.MemberRepository.save(MemberRepository.java:16) at app//jpabook.jpashop.MemberRepository$$FastClassBySpringCGLIB$$a3e1a60b.invoke(<generated>) at app//org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) at app//org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) at app//org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) at app//org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) at app//org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) ... 90 moreCaused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Sequence "HIBERNATE_SEQUENCE" not found; SQL statement:call next value for hibernate_sequence [90036-200] at org.h2.message.DbException.getJdbcSQLException(DbException.java:576) at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) at org.h2.message.DbException.get(DbException.java:205) at org.h2.message.DbException.get(DbException.java:181) at org.h2.command.Parser.readSequence(Parser.java:7678) at org.h2.command.Parser.readTermWithIdentifier(Parser.java:4593) at org.h2.command.Parser.readTerm(Parser.java:4311) at org.h2.command.Parser.readFactor(Parser.java:3343) at org.h2.command.Parser.readSum(Parser.java:3330) at org.h2.command.Parser.readConcat(Parser.java:3305) at org.h2.command.Parser.readCondition(Parser.java:3108) at org.h2.command.Parser.readExpression(Parser.java:3059) at org.h2.command.Parser.parseCall(Parser.java:6480) at org.h2.command.Parser.parsePrepared(Parser.java:905) at org.h2.command.Parser.parse(Parser.java:843) at org.h2.command.Parser.parse(Parser.java:815) at org.h2.command.Parser.prepareCommand(Parser.java:738) at org.h2.engine.Session.prepareLocal(Session.java:657) at org.h2.server.TcpServerThread.process(TcpServerThread.java:278) at org.h2.server.TcpServerThread.run(TcpServerThread.java:183) at java.base/java.lang.Thread.run(Thread.java:829) at app//org.h2.message.DbException.getJdbcSQLException(DbException.java:632) at app//org.h2.engine.SessionRemote.readException(SessionRemote.java:637) at app//org.h2.engine.SessionRemote.done(SessionRemote.java:606) at app//org.h2.command.CommandRemote.prepare(CommandRemote.java:78) at app//org.h2.command.CommandRemote.<init>(CommandRemote.java:50) at app//org.h2.engine.SessionRemote.prepareCommand(SessionRemote.java:480) at app//org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1116) at app//org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:92) at app//org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:288) at app//com.zaxxer.hikari.pool.ProxyConnection.prepareStatement(ProxyConnection.java:337) at app//com.zaxxer.hikari.pool.HikariProxyConnection.prepareStatement(HikariProxyConnection.java) at app//org.hibernate.engine.jdbc.internal.StatementPreparerImpl$1.doPrepare(StatementPreparerImpl.java:90) at app//org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:176) ... 114 moreMemberRepositoryTest > testMember() FAILED org.springframework.dao.InvalidDataAccessResourceUsageException at MemberRepositoryTest.java:24 Caused by: org.hibernate.exception.SQLGrammarException at MemberRepositoryTest.java:24 Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException at MemberRepositoryTest.java:242022-08-31 23:43:24.667 INFO 10712 --- [ionShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'2022-08-31 23:43:24.671 INFO 10712 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...2022-08-31 23:43:24.699 INFO 10712 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.1 test completed, 1 failed> Task :test FAILEDFAILURE: Build failed with an exception.* What went wrong:Execution failed for task ':test'.> There were failing tests. See the report at: file:///C:/Users/XNOTE/Desktop/TIL/Spring/jpashop/build/reports/tests/test/index.html* Try:> Run with --stacktrace option to get the stack trace.> Run with --info or --debug option to get more log output.> Run with --scan to get full insights.* Get more help at https://help.gradle.orgBUILD FAILED in 12s4 actionable tasks: 2 executed, 2 up-to-date
- 해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
[POST] updateItem에서 @ModelAttribute쓴 이유
안녕하세요, 상품수정 post controller의 코드를 보다가 궁금한 점이 생겨 질문드립니다.@PostMapping("/items/{itemId}/edit") public String updateItem(@ModelAttribute("form") BookForm form) { itemService.updateItem(form.getId(), form.getName(), form.getPrice(), form.getStockQuantity()); return "redirect:/items"; }해당 메소드의 parameter인 BookForm 앞에 왜 ModelAttribute가 붙었는지 궁금합니다. return "redirect:/items"로 url요청을 할 때 Model을 전달하기 위함인가요? 그런데 [GET]/items 메소드는 form에 대한 data를 필요로 하지 않는 것 같습니다. @GetMapping("/items") public String list(Model model) { List<Item> items = itemService.findItems(); model.addAttribute("items", items); return "items/itemList"; }
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
order_item 테이블 질문
Order 와 Item 의 중간 테이블인 Order_item 테이블 역할에 대해 질문드립니다.. 주문 생성 시에 , 주문은 orderrepository를 통해 save 되는 걸로 강의에서 확인했는데, 정작 order id정보와 item 정보를 가지고 있는 order_item 테이블은 그대로인 상태인데.. 따로 order정보를 저장을 해야하는 건가요? (order테이블엔 item 정보가 안들어가서. .)저장한다면, order 테이블에 저장되는 시점에서 저장되는 게 맞는 건가요?
- 미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
th:class="${#fields.hasErrors('name')}? 'form-control fieldError' : 'form-control'"
위의 코드는 구체적으로 어떻게 동작하는 것인가요??? 구글링을 해보았는데 키워드자체를 몰라 정보를 얻기 어려웠습니다. 어떤 키워드로 검색해보는 것이 좋은가요?