학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. id to load is required for loading; nested exception is java.lang.IllegalArgumentException: id to load is required for loading 오류 발생합니다 Long orderId 값이 null 값이여서 오류가 납니다. 왜 null값이 들어가는지 이해가 안됩니다. class OrderServiceTest { @Autowired EntityManager em; @Autowired OrderService orderService; @Autowired OrderRepository orderRepository; @Test public void 상품주문() throws Exception{ Member member=new Member(); member.setName("회원1"); member.setAddress(new Address("서울","강가","123-123")); em.persist(member); Book book=new Book(); book.setName("시골 JPA"); book.setPrice(10000); book.setStockQuantity(10); em.persist(book); int orderCount=2; Long orderId = orderService.order(member.getId(), book.getId(), orderCount); Order getOrder = orderRepository.findOne(orderId); assertEquals("상품 주문시 상태는 ORDER", OrderStatus.ORDER,getOrder.getStatus()); } @Test public void 주문취소() throws Exception{ } @Test public void 상품주문_재고수량초과() throws Exception{ } }
Projections을 이용한 조회 테스트를 하고 있던중 Projections.fields에 대해 궁금한점이 있습니다. Dto에 @AllArgsConstructor만 적용하고 Projections.fields를 사용하게 되면 해당 인스턴스를 만들지 못한다고 exception이 발생합니다. 영한님께서 강의에서 말쓴하신 Projections.fields의 특성은 getter, setter가 필요가 없고 생성자 또한 필요가 없다라고 하셨는데 이상하게 @AllArgsConstructor를 추가하면 exception이 발생합니다. ex @Getter @AllArgsConstructor public class ArticleFieldsDto{ private Long id; private String title; private LocalDateTime lastModifiedDate; private Long lastModifiedBy; } 예외 로그 com.querydsl.core.types.ExpressionException: com.mylaboratory.jpa_and_querydsl.projections.dto.ArticleFieldsDto at com.querydsl.core.types.QBean.newInstance(QBean.java:246) at com.querydsl.core.support.NumberConversions.newInstance(NumberConversions.java:86) at com.querydsl.jpa.FactoryExpressionTransformer.transformTuple(FactoryExpressionTransformer.java:51) at org.hibernate.sql.results.internal.RowTransformerTupleTransformerAdapter.transformRow(RowTransformerTupleTransformerAdapter.java:30) at org.hibernate.sql.results.internal.StandardRowReader.readRow(StandardRowReader.java:109) at org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:198) at org.hibernate.sql.results.spi.ListResultsConsumer.consume(ListResultsConsumer.java:33) at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.doExecuteQuery(JdbcSelectExecutorStandardImpl.java:443) at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.executeQuery(JdbcSelectExecutorStandardImpl.java:166) at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.list(JdbcSelectExecutorStandardImpl.java:91) at org.hibernate.sql.exec.spi.JdbcSelectExecutor.list(JdbcSelectExecutor.java:31) at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.lambda$new$0(ConcreteSqmSelectQueryPlan.java:113) at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.withCacheableSqmInterpretation(ConcreteSqmSelectQueryPlan.java:335) at org.hibernate.query.sqm.internal.ConcreteSqmSelectQueryPlan.performList(ConcreteSqmSelectQueryPlan.java:276) at org.hibernate.query.sqm.internal.QuerySqmImpl.doList(QuerySqmImpl.java:571) at org.hibernate.query.spi.AbstractSelectionQuery.list(AbstractSelectionQuery.java:363) at org.hibernate.query.sqm.internal.QuerySqmImpl.list(QuerySqmImpl.java:1073) at org.hibernate.query.spi.AbstractSelectionQuery.getSingleResult(AbstractSelectionQuery.java:457) at org.hibernate.query.sqm.internal.QuerySqmImpl.getSingleResult(QuerySqmImpl.java:1103) at com.querydsl.jpa.impl.AbstractJPAQuery.getSingleResult(AbstractJPAQuery.java:214) at com.querydsl.jpa.impl.AbstractJPAQuery.fetchOne(AbstractJPAQuery.java:326) at com.mylaboratory.jpa_and_querydsl.projections.ProjectionsTest.projections_field(ProjectionsTest.java:70) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:727) at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147) at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86) at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103) at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93) at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92) at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:217) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:213) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:138) at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:68) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:147) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:127) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:90) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:55) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:102) at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:54) 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 com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:71) at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54) Caused by: java.lang.InstantiationException: com.mylaboratory.jpa_and_querydsl.projections.dto.ArticleFieldsDto at java.base/java.lang.Class.newInstance(Class.java:639) at com.querydsl.core.types.QBean.create(QBean.java:251) at com.querydsl.core.types.QBean.newInstance(QBean.java:222) ... 91 more Caused by: java.lang.NoSuchMethodException: com.mylaboratory.jpa_and_querydsl.projections.dto.ArticleFieldsDto.<init>() at java.base/java.lang.Class.getConstructor0(Class.java:3585) at java.base/java.lang.Class.newInstance(Class.java:626) ... 93 more 예외가 발생하지 않는 경우는 아래와 같습니다. @NoArgsConstructor, @AllArgsConstructor 모두 사용 @NoArgsConstructor, @AllArgsConstructor 모두 사용 X @NoArgsConstructor 만 사용
안녕하세요 강의 잘보고 있습니다. 혼자 공부하면서 이것저것 해보고 있습니다. 다름이 아니라 DB로부터 DTO로 바로 조회를 하고 싶은데 막상 쿼리를 실행하면 적절한 생성자가 존재하지 않는다고 나옵니다. 해당 Dto에 롬복을 이용해서 생성자 어노테이션을 붙여보기도 하고 직접 생성해서 코드를 실행 시켜보기도 하였으나 제대로 동작하지 않습니다. 혹시 한번만 봐주실수 있나요? 환경은 다음과 같습니다. 자바 : 17 스프링부트 : 3.0.2 DB : 마리아DB 파일링크 https://drive.google.com/file/d/1mJ4S-I938BXV7dtyono_uZfSXQxKtE8Q/view?usp=share_link
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
안녕하세요 강사님. 이번 강의에서는 UserLoanHistory 클래스를 @Entity로 사용하는데요, userId, bookName 등 변수에 @column 어노테이션을 붙이지 않은 것을 확인할 수 있었습니다. 저번에 강사님께서 column 어노테이션이 없으면 변수명과 동일한 db 필드에 매핑된다고 하셨습니다. 이번강의에서 코드가 정상적으로 동작하는데 column 어노테이션이 없을때 자바의 camel case 변수가 db의 snake 형태의 이름으로 자동으로 변환되어 쿼리문이 실행되는 건지 궁금합니다.
안녕하세요 강사님 CASCADE 강의를 들으면서 공부 도중 여러가지 테스트를 해보면서 이해가 안되는 부분이 있어서요 제가 이해한 내용으로는 CASCADE를 사용하면 Parent 필드에 있는 children 도 연관관계의 주인의 기능을 할 수 있다고 이해했는데요 위 코드를 실행한 결과 findChild1은 삭제 되지 않고 db에 남아있었습니다. 또한 em.remove(findChild1)을 지우고 list.remove(0)을 넣어도 데이터가 그대로 남아 있었습니다. CASCADE 속성은 ALL으로 사용했습니다. 질문 1 영속성컨텍스트에 child 객체 두개와 children 내부에 child 객체 두개가 있어서 그런건가요? 질문2 그리고 고아객체 강의를 보고 이해가 안되는게 CascadeType.ALL + orphanRemoval=true 을 쓰는 것과 CascadeType.ALL 만 쓰는 것에 차이가 있을까요?
JpaRepository를 상속 받는 인터페이스 정의 @NoRepositoryBean 기본 구현체를 상속 받는 커스텀 구현체 만들기 @EnableJpaRepositories에 설정 repositoryBaseClass 기본 리포지토리를 커스터마이징할 때 위와 같은 방법으로 하라고 알려주셨는데요, 인터페이스에서 JpaRepository를 상속받았는데 구현체에서 SimpleJpaRepository<T, ID>를 상속받는 이유를 모르겠습니다. 구현체가 (JpaRepository를 상속받은)인터페이스를 구현하니까 JpaRepository 기능을 사용할 수 있지 않나? 라고 생각했습니다. 아마 제가 상속과 구현 개념이 제대로 잡혀있지 않아서 그런 것 같습니다. 설명해 주시면 저에게 많은 도움이 될 것 같습니다. 좋은 강의 만들어주셔서 감사합니다!
[질문 내용] 회원 목록 조회 강의수강중입니다. 어플리케이션을 재시작 할때마다 DB에 테이블이 재생성이 되면서 기존 데이터가 사라집니다. yml에 ddl-auto : create설정 때문인 것 같은데, none, 이나 update로 설정하면 테이블의 재생성은 방지가 되는데, 최초 구동 시 JPA가 테이블을 생성하는것도 막히는건지 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 코드도 pdf에 있는 거 복붙해서 똑같이 따라하고 있는데 오류가 나서요 ㅜㅜ h2 DB도 같이 실행해서 하고 있는 중이에요..😥
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. id to load is required for loading; nested exception is java.lang.IllegalArgumentException: id to load is required for loading 오류 발생합니다 코드: package jpabook.jpashop.service; import jpabook.jpashop.domain.Address; import jpabook.jpashop.domain.Member; import jpabook.jpashop.domain.Order; import jpabook.jpashop.domain.OrderStatus; import jpabook.jpashop.domain.item.Book; import jpabook.jpashop.domain.item.Item; import jpabook.jpashop.repository.OrderRepository; import org.junit.Assert; import org.junit.jupiter.api.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.transaction.annotation.Transactional; import javax.persistence.EntityManager; import static org.junit.Assert.*; @RunWith(SpringRunner.class) @SpringBootTest @Transactional class OrderServiceTest { @Autowired EntityManager em; @Autowired OrderService orderService; @Autowired OrderRepository orderRepository; @Test public void 상품주문() throws Exception{ Member member=new Member(); member.setName("회원1"); member.setAddress(new Address("서울","강가","123-123")); em.persist(member); Book book=new Book(); book.setName("시골 JPA"); book.setPrice(10000); book.setStockQuantity(10); System.out.println(book.getId()); em.persist(book); int orderCount=2; Long orderId = orderService.order(member.getId(), book.getId(), orderCount); Order getOrder = orderRepository.findOne(orderId); assertEquals("상품 주문시 상태는 ORDER", OrderStatus.ORDER,getOrder.getStatus()); } @Test public void 주문취소() throws Exception{ } @Test public void 상품주문_재고수량초과() throws Exception{ } }
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) 안녕하세요. 다름이 아니라 @JoinColumn 에서는 name 속성으로 외래키 컬럼의 컬럼명을 지정하고, 생략된 referenceColumName 속성을 통해 해당 외래키가 대상 테이블의 어떤 컬럼과 연결되는지 정하는 것으로 알고 있습니다. @OneToMany @JoinColumn(name = "TEAM_ID") private List<Member> members = new ArrayList<>(); 그런데 일대다 연관관계에서 다음과 같이 일 쪽에서 joinColumn을 넣어줄 경우 referenceColumnName 속성은 디폴트 값으로 어떤 컬럼과 연결되는지 궁금합니다. 영한 선생님의 답변글에서는 디폴트 값으로 해당 필드의 타입을 확인하고 해당 타입의 pk컬럼과 연결시켜준다고 봤는데 위 경우는 List가 나와서 어떻게 되는지 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] member 을 조회할때 team 을 같이 조회하는 경우와 member 만 조회하는 경우 선택적으로 유연하게 사용가능한 방법이 있을까요? member 목록만 심플하게 사용하고 싶은 경우가 있을것 같은데, 굳이 team 정보가 필요하지 않는 경우에는 불필요하게 조회가 일어날 수 있을것 같아서요 이런경우에는 어떻게 사용하면 좋을지 궁금합니다.
모든 클래스에 entity를 넣은 것은 확인했고요 ㄴh2도 켜져있는 거 확인했습니다. 스프링부트는 3.0.3버전 h2는 2.1.214버전을 사용하고 있습니다. entity도 저렇게 diagram으로 잘 나오는 것을 확인했습니다. application.properties는 다음 사진과 같이 설정해뒀습니다. build파일에 classes에 entity들도 잘 들어가 있고 실행하는데는 에러가 안납니다. 실행시키고 h2에 들어가보면 테이블이 생성이 안돼있고 스프링부트 로그에도 테이블 생성 쿼리가 안보입니다. 뭐가 문제일까요?
스프링 부트가 현재는 2.7.X 버전 밖에 없어서 그걸로 다운받았는데, 버전이 달라서 인지, junit4를 위해 를 추가하면 자꾸 에러가 납니다. 어떻게 해결해야 하나요? ++ 위 코드를 넣지 않았는데 라이브러리에 이렇게 뜨는데 그럼 junit4를 사용할 수 있는 상태인 건가요?~
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) 22:05초 부분을 보면 Lazy 옵션으로 바꾸고 실행을 해보면 em.find() 로 team 클래스를 찾아보지 않았음에도 team 엔티티에 select 쿼리가 나가는데 왜 해당 쿼리가 발생하는지 궁금합니다. Team findTeam = findMember.getTeam() 을 통해 해당 Team 객체를 얻었으니까 select 쿼리가 나갈 필요가 없는 것 아닌가요? 아니면 Team findTeam = findMember.getTeam()을 통해 얻은 해당 Team 객체는 조인을 통해 Id 값만 가지고 있는 비어있는 객체라 select 쿼리가 추가적으로 나가서 해당 객체의 필드값을 채워줘야하는 상태인가요? 만약 이게 맞다면 DB에 외래키가 저장될때는 Id값만 저장하고 다른 값들(name 필드 등등)은 다 날려버리고 저장하게 되는건지 궁금합니다.