묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
application.yml이랑 application.properties
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]별로 중요한 질문은 아닐 수도 있는데이 강의에선 application.yml을 사용하시고, 이후에 찍으신 강의인 스프링 로드맵에선 항상 application.properties를 사용하셨던 거 같은데요즘엔 현업에서 뭘 더 선호하나요? 김영한 님이나 서포터즈 분들은 어떤 걸 더 선호하시는지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
autowired에 대한 고찰 이 코드도 결국 스프링이 자동으로 의존성을 주입해주는 코드일텐데 어째서 Autowired는 지양되고 이러한 코드는 사용해도 되는건가요? lombok을 통한 생성자주입과 autowired를 통한 생성자 주입은 어떤 다른 점이 있는
autowired에 대한 고찰이 코드도 결국 스프링이 자동으로 의존성을 주입해주는 코드일텐데 어째서 Autowired는 지양되고 이러한 코드는 사용해도 되는건가요? lombok을 통한 생성자주입과 autowired를 통한 생성자 주입은 어떤 다른 점이 있는건가요
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
주문 목록 submit 오류
주문 목록 입력 후 "Submit" 클릭 시 OrderStatus 관련 오류가 발생하는 것 같습니다. db에는 잘 저장되는 거 같은데 어떤 코드가 잘못된지 혼자 힘으로 찾지 못하겠어서 질문드립니다.. 코드 오류인것 같은데 찾아보려 노력했는데도 잘 보이지가 않네요 ㅎㅎ.. 아래는 구글 드라이브 링크 첨부드립니다.https://drive.google.com/file/d/15k5n02QDFcakFz3uhJg3k-4QOI2U2UGy/view?usp=sharing
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberRepositoryTest 를 실행시켰을때 IllegalStateException 에러가 납니다..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예[질문 내용]강의 내용과 똑같이 했는데 뭐가 문제일까요.. java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@23f5008a testClass = jpabook.jpashop.MemberRepositoryTest, locations = [], classes = [jpabook.jpashop.JpashopApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.autoconfigure.OnFailureConditionReportContextCustomizerFactory$OnFailureConditionReportContextCustomizer@7c3fdb62, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@1130520d, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@7a3793c7, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@5456afaa, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@1c39680d, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@1787bc24, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.springframework.boot.test.context.SpringBootTestAnnotation@d0411fb6], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null] 위와 같은 에러가 발생합니다.. 해결법을 알려주세요 ㅠㅠ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
서비스단에 리포지토리를 주입받는 부분
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Order에서 처럼 서비스 단에 리포지토리만을 주입받아서 사용하는게 맞는 것인지 아니면 다른 서비스를 주입받아 사용하는게 좋은 로직인지 궁금합니다. 예를들어 findById를 리포지토리로 찾을 수도 있지만 memberService.findOne으로 가져올수도 있는 경우 어떤 것을 주입받아 사용하는것이 맞는 방식인지 질문드려요
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Mockito 경고
[질문 내용]Mockito is currently self-attaching to enable the inline-mock-maker. This will no longer work in future releases of the JDK. Please add Mockito as an agent to your build what is described in Mockito's documentation: https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html#0.3WARNING: A Java agent has been loaded dynamically (C:\Users\jaejin\.gradle\caches\modules-2\files-2.1\net.bytebuddy\byte-buddy-agent\1.15.11\a38b16385e867f59a641330f0362ebe742788ed8\byte-buddy-agent-1.15.11.jar)WARNING: If a serviceability tool is in use, please run with -XX:+EnableDynamicAgentLoading to hide this warningWARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more informationWARNING: Dynamic loading of agents will be disallowed by default in a future release테스트는 통과를 했는데 위와같은 경고문이 나오네요 어떤 의미인지 잘 모르겠습니다.신경 쓰지않고 계속 진행해도 되는건가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
order의 cancel 메서드 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]public void cancel(){ if(delivery.getDeliveryStatus() == DeliveryStatus.COMP){ throw new RuntimeException("이미 배송된 상품입니다"); } this.statusCancel(); for (OrderItem orderItem : orderItems) { orderItem.cancel(); } } 이렇게 메서드가 있는데 여기에서 orderItem 컬랙션에 있는 값들을 cancel로직을 통해 삭제하게 될 경우 db에 반영이 정상적으로 되나요? 즉 리포지토리에서 가져온 상태가 아닌 그냥 도메인 단에서 처리해줘도 영속성 컨텍스트에 의해 관리되고 더티체킹이 적용되어 cancel 로직에 의해 업데이트 되는건가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
./gradlew clean bulid 오류가 납니다.. 도와주세요..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용](base) mirae@mirae-MacBookPro jpashop % ./gradlew clean buildStarting a Gradle Daemon, 1 incompatible Daemon could not be reused, use --status for details> Task :testJpashopApplicationTests > contextLoads() FAILEDjava.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:180Caused by: org.springframework.beans.factory.BeanCreationException at AbstractAutowireCapableBeanFactory.java:1773Caused by: org.hibernate.service.spi.ServiceException at AbstractServiceRegistryImpl.java:276Caused by: org.hibernate.HibernateException at DialectFactoryImpl.java:1911 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:///Users/mirae/Desktop/study/SPRING_BOOT/jpashop/build/reports/tests/test/index.html* Try:> Run with --scan to get full insights.Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.For more on this, please refer to https://docs.gradle.org/8.5/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.BUILD FAILED in 10s8 actionable tasks: 8 executed(base) mirae@mirae-MacBookPro jpashop %같은 질문에서 해결 방안을 다 따라해봤지만 계속 오류가 납니다.gradlew 버전 8.5 , JDK 버전 21.0.1 이고intel macBook입니다
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
bytebuddyINterceptor 에 대해서 궁금한점이 있습니다.
api 2편을 수강중 궁금한게 있어서 질문올려요2편내용중에 public List<Order> ordersV1() { List<Order> all = orderRepository.findAllByString(new OrderSearch()); for (Order order : all) { order.getMember().getName(); //Lazy 강제 초기화 order.getDelivery().getAddress(); //Lazy 강제 초기화 } return all; }호출할때 member 지연로딩인경우 예외발생하던데그래서 hibernate5Module 모듈을 설정을했습니다. 그런데 1편엔 그런설정이 없는데 정상작동이 되는데 무슨차이가 있나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
h2 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]h2 데이터베이스 연결하기 위해 다음과 같이 했는데 오류가 발생하고 접근이 안됩니다.프로젝트 위치는 E:\study\jpashop 여기입니다.어떤 설정을 해줘야하나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티와 dto에 대해 궁금한점이 있습니다
안녕하세요!엔티티와 dto에 대해 궁금한점이 생겨 질문드립니다!강의를보면 엔티티에 연관관계메서드와 로직 등 관련된 메서드를 작성하셨는데요그리고 엔티티는 외부에 노출되면 안된다라고 언급하셨는데그렇다면 엔티티를 직접쓰는게아닌 DTO를 따로 작성해서 사용하는건가요?(1번의 질문이 맞는질문이라면)그럼 엔티티에 10개의 필드들이 있고, 각각 조회용으로 6개의 필드, 수정용으로 8개의 필드가 필요하다고 가정하면 DTO를 조회용과 수정용 두개를 만들어야할까요?이건 좀 번외인거같긴하지만.... 지금까지 공부하면서 엔티티에 빌더패턴을 적용해왔는데요. 외부에 엔티티가 노출되지않으려면 DTO를 써야하고, 그렇다면 엔티티에 빌더패턴을 써야하는게아니라 DTO에 빌더패턴을 써야하는걸까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
채번 쿼리 로그
안녕하세요.아래 강의 소스의 내용중 memberService.join메소드를 호출시 em.persist로 인해 select next value 시퀀스값을 가져오는 쿼리를 기대했습니다.@SpringBootTest(classes = JpashopApplication.class) @Transactional public class MemberServiceTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Autowired EntityManager em; @Test @Rollback(value = false) public void 회원가입() throws Exception { System.out.println("MemberServiceTest.회원가입"); //given Member member = new Member(); member.setName("kim"); //when Long savedId = memberService.join(member); //then assertThat(memberRepository.findOne(savedId)).isEqualTo(member); } 하지만, 아래 소스 InitDb의 init메소드의 제거 여부에 따라위 시퀀스 채번쿼리가 나타났다 사라졌다 합니다.@Component @RequiredArgsConstructor public class InitDb { private final InitService initService; @PostConstruct public void init() { initService.dbInit1(); initService.dbInit2(); } .... }다른 분들 도 같은 현상을 겪는지 궁금하며 원인을 알고싶습니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
컬렉션 필드에 대한 하이버네이트의 추적
안녕하세요.강의 13:00에서@OneToMany 컬렉션 필드를 하이버네이트가 변경사항을 추적한다는 말씀을 하셨습니다. 연관관계의 주인이 아닌 거울이기 때문에 컬렉션에 요소를 추가/제거 하더라도 테이블에 영향을 주지 않는데요. 즉 더티체킹을 하지 않는 것으로 이해했기 때문에 하이버네이트가 추적을 한다는 말씀이 잘 와닫지 않습니다. 제가 잘못이해한 것이 있는지 궁금합니다~!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
다대다 관계 1:N, N:1 로 풀기
1. 강의 내용과 관련된 질문인가요? (예/아니오)네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)네3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)네[질문 내용]왜 주문과 상품은 1:N, N:1로 풀고, 카테고리와 상품은 풀지 않은 건가요? 둘 다 다대다 관계인데 어떤 의미가 있나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
엔티티매니저가 각각의 저장소에서 final로 선언될 수 있는 이유
엔티티매니저가 각각의 저장소에서 final로 선언될 수 있는 이유가 궁금합니다. final의 경우 한 번 선언하면, 교체될 수 없는 것 아닌가요? 혹시 관련 자료와 함께 설명을 첨부 해주시면 너무 감사하겠습니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
jpa 1:N insert시 트랜잭션 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.OneToMany; import jakarta.persistence.Table; import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @Entity @Table(name = "tb_board") @NoArgsConstructor(access = AccessLevel.PUBLIC) @Getter @Setter public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "BOARD_ID", columnDefinition = "BIGINT COMMENT '게시판ID'") private Long id; @Column(name = "BOARD_NM", nullable = false, unique = true, length = 100, columnDefinition = "VARCHAR(100) COMMENT '게시판명'") private String boardNm; @OneToMany(mappedBy = "board", cascade = CascadeType.ALL, orphanRemoval = true) private List<Article> articleList = new ArrayList<Article>(); @Builder private Board(Long boardId, String boardNm) { this.boardNm= boardNm; this.id = boardId; } public Board createBoard(Long boardId, String boardNm) { return Board.builder().boardId(boardId).boardNm(boardNm).build(); } public void addArticle(Article article) { this.articleList.add(article); } @Column(name="REG_ID" ,nullable=false,columnDefinition="VARCHAR(100) comment '등록자'") private String regId; @Column(name = "CREATED_AT", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP") private LocalDateTime createdAt; @Column(name="UPD_ID" ,nullable=false,columnDefinition="VARCHAR(100) comment '등록자'") private String updId; @Column(name = "UPDATED_AT", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP") private LocalDateTime updatedAt; } @Entity @Table(name = "tb_article") @Builder @Getter @Setter @AllArgsConstructor @NoArgsConstructor public class Article { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "ARTICLE_ID", columnDefinition = "BIGINT COMMENT '게시글ID'") private Long id; @Column(name = "ARTICLE_TITLE", columnDefinition = "VARCHAR(100) COMMENT '게시글제목'") private String title; @Column(name = "ARTICLE_CONTENT", columnDefinition = "VARCHAR(600) COMMENT '게시글내용'") private String content; @Column(name = "REG_ID", nullable = false, columnDefinition = "VARCHAR(100) comment '등록자'") private String regId; @Column(name = "CREATED_AT", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP") private LocalDateTime createdAt; @Column(name = "UPD_ID", nullable = false, columnDefinition = "VARCHAR(100) comment '등록자'") private String updId; @Column(name = "UPDATED_AT", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP") private LocalDateTime updatedAt; @ManyToOne @JoinColumn(name = "BOARD_ID", nullable = false) private Board board; } @Transactional(rollbackFor = Exception.class) // 체크 예외도 롤백 public void saveArticle(Article article) { try { log.info("article",article.getTitle()); Long boardId = 13L; Board paramBoard = null; Optional<Board> rBoard = boardRepository.findById(boardId); if(rBoard.isPresent()) { paramBoard =rBoard.get(); }else { paramBoard = new Board().createBoard(boardId, "게시판"); paramBoard = boardRepository.save(paramBoard); } Article paramArticle = Article.builder() .title(article.getTitle()) .content(article.getContent()) .regId("등록자") .createdAt(LocalDateTime.now()) .updatedAt(LocalDateTime.now()) .board(paramBoard) .updId("수정자") .build(); if(paramBoard.getArticleList() == null) { List<Article> articles =new ArrayList<Article>(); articles.add(paramArticle); paramBoard.setArticleList(articles); }else { paramBoard.getArticleList().add(paramArticle); } boardRepository.save(paramBoard); }catch(Exception ex) { log.error("Error saving article", ex); throw ex; } }else { paramBoard = new Board().createBoard(boardId, "게시판"); paramBoard = boardRepository.save(paramBoard); } 여기서 save를 돌떄 org.springframework.orm.ObjectOptimisticLockingFailureException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [com.backend.com.entity.Board#13] at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:325) ~[spring-orm-6.2.2.jar:6.2.2] at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:244) ~[spring-orm-6.2.2.jar:6.2.2] 요런식으로 뜨는데public interface BoardRepository extends JpaRepository<Board, Long>, QuerydslPredicateExecutor<Board> { Optional<Board> findById(Long boardId); } querydsl과 jpa같이 사용하고싶어서 요렇게 셋팅하고 공부중입니다. 해본 방법boardRepository.save(paramBoard) 부분을 빼고 마지막boardRepository.save(paramBoard); 만 돌려봤지만 마찬가지 에러가 발생했었고 혹시 table 쪽에 lock이 걸려있나 싶어서 보니 lock도 없었음3. 지피티 한테 물어보니깐 @Lock(LockModeType.PESSIMISTIC_WRITE)쓰라고 해서 save쪽에 넣어봄 . 마찬가지 ..Board쪽에 @Version @Column(name = "version") private Long version;을 추가하라고 해서 추가해봐도 마찬가지 ..이유는 "Row was updated or deleted by another transaction" 오류는 동시에 여러 트랜잭션에서 동일한 데이터를 수정하거나 삭제할 때 발생할 수 있습니다. 즉, 한 트랜잭션에서 데이터를 수정하는 동안 다른 트랜잭션에서 동일한 데이터를 수정하거나 삭제했기 때문에 충돌이 발생하는 것이라는데 잘 모르겠습니다 뭐가 문제일까요 .
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
상품 엔티티 관련하여 질문 드립니다.
제공 해주신 코드에서 ITEM에는 왜 @OneToMany(mappedBy = "order", cascade = CascadeType.ALL) private List<OrderItem> orderItems = new ArrayList<>(); 이거에 해당하는 코드가 없을까요?@OneToMany(mappedBy = "item", cascade = CascadeType.ALL) private List<OrderItem> orderItems = new ArrayList<>(); 이런 코드가 있어야 1대 다 관계에서 매핑과 주인관계를 결정해줄 수 있지 않나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberRepositoryTest 실행시 오류가 발생합니다
https://drive.google.com/file/d/1xCfH-VjJWp4I252km26K5kFyBZNY3ZaS/view?usp=sharingjunit4는 assertThat을 지원하지 않는다고 하여 junit5로 하고 실행하였더니 h2데이터베이스 연결문제가 발생하는 것 같습니다. h2는 정상적으로 설치하여 잘 작동됩니다. 어디가 문제일까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
연관관계의 관점
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 회원-주문 관계에서 하나의 회원은 여러 주문을 할수있어서 1:N이라 하셨는데 서버 관점에서 보면 여러 회원이 존재하기 때문에 N:M으로 설계해야 하지 않을까요??고객 한명당 트랜잭션 관점으로 설계를 해야하는건지 기준이 따로 있는지 궁금합니다..
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
조회 시 Entity를 뿌리는 것 아닌가요 ?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]view 계층과 주고 받을 때는 dto로 주고 받아야 하니 들어올 때 form을 사용했는데, 지금처럼 em.createQuery("select i from Item i", Item.class).getResultList(); 이런 repo 코드를 정제없이 그대로 return 해주는 경우 Entity를 직접 전달하고 있는 것 아닌가요 ??잘못 이해하고 있는 부분에 대해 짚어주시면 감사하겠습니다.만약 잘 이해하고 있고, 예제라서 이렇게 처리한 것이라면, 정제하는 과정이 서비스 단에서 일어나는게 좋을까요 ? 컨트롤러 단에서 일어나는게 좋을까요 ?