inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

OrderServiceTest 실패

해결됨

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

OrderServiceTest에서 assertEquals("주문 가격은 가격 * 수량이다")에서 실패가 뜨는데 원인을 찾기 어려워 질문 드립니다. 26000원이 나와야 하는데 0원이 나와서.. 총 가격을 구하는 for문이 안 돌아갔나 싶은데 코드에 오류는 없는 것 같아서 원인을 찾기 어렵습니다. https://drive.google.com/file/d/1SSJFsd6F2hikp7T3MONt5QvklxY-EX3B/view?usp=sharing

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
sichelmond 댓글 1 좋아요 1 조회수 103

LockSupport.park()의 isInterrupted() 질문

미해결

김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성

안녕하세요. 김영한님의 강의 잘 보고 있습니다. 바보 같은 질문일 수 있지만, Thread.sleep()과는 다르게 LockSupport.park()는 interrupt()를 이용해서 깨어나도 isInterrupted()가 true인 이유가 궁금합니다. 그냥 단순히 InterruptedException이 발생하지 않기 때문일까요?

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
강동현 댓글 1 좋아요 0 조회수 353

Batch size의 작동 순서가 궁금합니다.

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? ( 예 /아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? ( 예 /아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? ( 예 /아니오) [질문 내용] 프록시 부분도 있어 조금 복합적이긴 한데 Batch size의 작동 순서가 궁금합니다. 제가 이해하기로는 예를 들어 수업과 같이 Member 엔티티는 public class Member { @Id @GeneratedValue private Long id; private String name; private int age; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TEAM_ID") Team team; } Team 엔티티는 public class Team { @Id @GeneratedValue private Long id; private String name; @BatchSize(size = 100) @OneToMany(mappedBy = "team") private List<Member> members = new ArrayList<>(); } 위와 같다고 할때 select t from Team t 해당 JPQL로 Team 엔티티들을 조회한다면 t.members의 객체들은 프록시로 존재하여 id 값만을 가지게 되고 for (Team result : resultList) { System.out.println("result = " + result.getMembers().size()); for (Member member : result.getMembers()) { System.out.println("member = " + member); } } 이 처럼 실행하면서 result.getMembers()가 처음 호출 될때 select m1_0.TEAM_ID, m1_0.id, m1_0.age, m1_0.name from Member m1_0 where m1_0.TEAM_ID in (?, ?...) 다음과 같은 쿼리를 호출해 Member 프록시들의 target에 알맞게 주입 해주게 되나요? 이 부분이 궁금하여 질문 드립니다.

  • java
  • jpa
leech2479 댓글 2 좋아요 1 조회수 350

예외부분에 대해서 질문드립니다

미해결

스프링 DB 1편 - 데이터 접근 핵심 원리

교재내용중에, " 해당람다에서 체크예외를 밖으로 던질수 없기때문에 언체크 예외로 바꾸어 던지도록 예외를 전환했다 " 의 의미는 ===> 람다에서는 bizLogic()을 호출할때 발생하는 체크예외를 throws를 사용해서 밖으로 던질수 없기때문에 try~catch로 예외를 처리했고, 체크예외를 처리할떄 catch안에서 throw로 IllegalStateException(언체크예외)로 바꾸어 던지는 이유는 트랜잭션 템플릿이 비즈니스로직을 수행하다가 언체크 예외가 발생하면 롤백하기 때문이다. 이렇게 이해하면될까요??

  • spring
  • mvc
  • spring-jdbc
오리쉐리 댓글 1 좋아요 0 조회수 203

강의에서 사용하는 keycloak 버전인 19.0.1 다운로드 URI 공유

미해결

스프링 시큐리티 OAuth2

강의를 매끄럽게 따라하려면 똑같은 keycloak 버전을 사용하셔야 합니다. 2x.x.x 버전 사용 시 openid를 강제로 사용해야 할 수 있습니다. 다운로드 URI : https://github.com/keycloak/keycloak/releases/download/19.0.1/keycloak-19.0.1.tar.gz

  • java
  • spring
  • spring-boot
  • oauth
화이팅 댓글 1 좋아요 0 조회수 188

적성....

미해결

김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음

냉정하게 적성이 없지만 꾸역꾸역 만들어가고 있는 사람입니다.. 여러분 화이팅!!!!!!!!!!!!

  • java
  • 객체지향
wnguddl96 댓글 4 좋아요 0 조회수 693

Missing parameter: code 에러

미해결

스프링 시큐리티 OAuth2

Oauth 2.0 User 모델 소개(2)영상에서 assessToken 호출을 위한 과정을 진행하는데 발생한 문제입니다. keycloack 버전이 달라 발생한 문제인지 질문드립니다. 현재 keycloack 버전 21.1.2 입니다.

  • java
  • spring
  • spring-boot
  • oauth
JUNI 댓글 1 좋아요 0 조회수 251

쿠키 로그아웃 질문

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 코드에서보면 새로운 쿠키를 만들어서 setMaxAge로 00 으로 설정해서 만료시키는거같은데 그런 이유가 있나요 ? 기존에 쿠키의 수명 0으로 만들어 만료시키는 방법은 안되나요??

  • spring
  • mvc
kkkkkk 댓글 1 좋아요 0 조회수 294

@Transactional이 필요한곳과 필요없는곳

해결됨

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

안녕하세요 service 관련 코드를 공부하다가 질문이 생겨서 문의드립니다. 제가 지금까지 봤던 코드들은 @Transactional(readOnly = true) 는 Read할 때 사용을 하고 @Transactional은 Read를 제외한 CUD일 때 사용을 한다고 알고있는데, 인터넷을 찾아보니 "모든 CUD 관련 코드에 @Transactional을 무분별하게 사용하면 성능에 저하가 올 수 있다. 트랜잭션은 묶음의 처리입니다. 단건의 INSERT, DELETE, UPDATE 는 Transaction 이 필요하지 않습니다." 라고 블로그에서 보았습니다. 모든 CUD 관련 코드에다가 @Transactional을 붙이면 안되는건가요? 또한 @Transactional(readOnly = true) 는 Read 관련 코드에 붙이는게 필수는 아닌가요? 어떤 방식으로 코드를 짜는게 좋은 코드인지 궁금합니다.

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
lllilililll 댓글 1 좋아요 0 조회수 347

this 질문

해결됨

김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성

그러면 main 메소드 내에 Thread thread1 = new Thread(..); Thread thread2 = new Thread(..); 이걸 실행하면 main 스택프레임내에 참조변수가 저장이될텐데 thread1,thread2가 아닌 this로 저장된다는건가요? 그러면 예를들어, 참조변수 a의 메소드를 실행하게된다면 먼저 스택프레임내에서 참조변수에서 실제 인스턴스가 저장된 힙 주소를 꺼내어서 그 힙주소로 간다음 메소드를 가져오는게 아니라 참조변수 a가 아닌 this 인거죠?

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
인프런 댓글 1 좋아요 0 조회수 360

강의 자료 어디에서 받아볼 수 있나요?

미해결

김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 수업자료 (문제풀이)만 보면서 직접 풀어보고 싶은데 자료는 어디서 받아볼 수 있을까요?

  • java
  • 객체지향
응달기 댓글 1 좋아요 0 조회수 206

어노테이션 유효성 검증과 ResponseEntityExceptionHandler

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

@Valid, @Validated 어노테이션으로도 유효성 검증이 가능하다는 것을 알고 있습니다. 그리고 GlobalExceptionHandler에서 ResponseEntityExceptionHandler 추상 클래스를 상속받아 메서드를 재정의해서 구현하는 방식으로 전역적으로 예외 객체 관리가 가능하다는 것을 알고 있는데요. 잘 이해가 되지 않는 부분이 있어 질문을 드립니다. 강의에서와 같이 DTO를 사용해 제약 조건을 추가해 타임리프에 오류 메시지를 추가하는건 BindingResult를 통해 이루어지는 것을 알고 있는데 어노테이션을 사용하면 타임리프에서의 유효성 검증만 가능한 것이고 ResponseEntityExceptionHandler 추상 클래스를 상속받아 메서드를 재정의해서 구현하는 경우에는 타임리프에 적용을 할 수 없고 RESTful API 개발에만 적용할 수 있는 것인가요? 타임리프 쓰면 그냥 DTO에 제약조건 걸고 어노테이션 써서 유효성 검증하는 것 말곤 방법이 없나요?

  • spring
  • mvc
피곤한개발자 댓글 1 좋아요 0 조회수 141

findBy 로 조회 시에, 조회 조건으로 PK vs Unique 제약조건 컬럼

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

테이블은 한 게시글 당 게시글 이미지를 여러 개 저장할 수 있도록 하는 postImage 테이블이고 pk는 autoincrement인 Long 타입 postImageId입니다. 그리고 unique한 조건은 @ManyToOne으로 매핑된 post(not null)와 imageUrl(not null) 컬럼의 조합입니다. 이 때, postImage 엔티티를 조회하기 위해서는 pk인 postImageId로 조회하는게 좋을까요? 아니면 unique 제약조건인 post+imageUrl로 조회하는게 좋을까요? 실무에서 더 선호되는 방식이나 성능적, 설계적으로 좋은 방식이 궁금합니다

  • java
  • jpa
jayjoy05 댓글 1 좋아요 0 조회수 128

스레드와 메모리영역 질문

해결됨

김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성

1:31 경에 쓰레드1,2,3 3개의 객체를 만들고 실행하잖아요 그러면 1:49 그림에서 3개의 인스턴스가 그려져야하는거 아닌가요? 반복문을 통해 Thread를 100개 실행하고 있습니다. 여기서, thread 참조변수에 Thread 객체를 생성하고 있던데, 그렇다면 for문 순회하나하고 블록 종료시점에 스택프레임이 제거되어 thread 참조변수는 제거될것이고 힙영역에 Thread 객체가 존재하다가 나중에 GC 실행시점에 Thread 객체가 지워질것으로 보이는데 맞나요? 만약 그렇게 Thread 객체가 지워진다면 실행중이던 스레드도 중단되나요?

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
인프런 댓글 1 좋아요 0 조회수 329

프론트엔드 + 서버 oauth2 연동

미해결

스프링 시큐리티 OAuth2

안녕하세요, 좋은 강의 감사합니다. 현재 제가 개발중인 react 로 된 SPA 어플리케이션이 있는데요, 프론트엔드에서 직접 authorization server 로 access token 을 가져오자니 페이지가 새로고침 될때 날라가는 현상 이 발생합니다. 이를 localStorage, sessionStorage, cookie 등에 저장하는것도 안전하지 않아서 (혹시 안전하게 하는 방법이 있나요?) 아예 "로그인"만 서버쪽에서 수행하고 access token, refresh token 을 프론트로 전달해줘서 refresh token 만 httpOnly Cookie 에 넣으려고 합니다. 이제 새로고침 될때마다 서버에 access token 요청을 refresh token 으로 한다음, 그 access token 을 사용하려고 합니다. 혹시 이 같은 방식이 쓰이는지 알 수 있을까요? 아니면 추천해 주시고 싶은 방식이 있으신가요? 2. 서버 사이드 view 를 통해 로그인만 oauth2Login 으로 수행하고, 로그인 후 나머지는 SPA 프론트엔드로 리다이렉트 가 가능한가요? 혹은 이렇게 쓰기도 하나요?

  • java
  • spring
  • spring-boot
  • oauth
광전사 댓글 1 좋아요 0 조회수 315

메서드 영역에 static 변수?

해결됨

김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성

자바 8부터 Heap 영역에 Static Object(Static Variable, static객체 , static method)이 존재하고 MetaSpace에는 static reference만 저장한다고 아래 글에서 읽었습니다. https://openjdk.org/jeps/122 어떤게 맞는건가요? 제가 오역한거같지는 않은게 다른 분들도 그렇게 말씀하시는것 같습니다. https://jgrammer.tistory.com/entry/JAVA-Java8%EB%B6%80%ED%84%B0%EB%8A%94-static%EC%9D%B4-heap%EC%98%81%EC%97%AD%EC%97%90-%EC%A0%80%EC%9E%A5%EB%90%9C%EB%8B%A4

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
인프런 댓글 1 좋아요 1 조회수 452

12장 퀴즈 runnableSet 질문

미해결

나도코딩의 자바 기본편 - 풀코스 (20시간)

퀴즈 풀이 진행시 저는 _03_JOIN 에서 사용한 것 처럼 클래스 내부에 함수를 만들어서 호출해서 사용하는 방식을 했습니다. 코드 package chap_12; public class _Quiz_12 { public static void main(String[] args) { Pkg pkg1 = new Pkg(); Pkg pkg2 = new Pkg(); Runnable a = new Runnable() { @Override public void run() { String name = "A"; int number = 1; for (int i = 1; i <= 5; i++) { pkg1.pack("A"); } System.out.println(" -- A 상품 준비 완료 -- "); } }; Runnable b = new Runnable() { @Override public void run() { String name = "B"; int number = 1; for (int i = 1; i <= 5; i++) { pkg2.pack("B"); } System.out.println(" -- B 상품 준비 완료 -- "); } }; Thread pkgA = new Thread(a); Thread pkgB = new Thread(b); pkgA.start(); pkgB.start(); try { pkgA.join(); pkgB.join(); } catch (InterruptedException e) { throw new RuntimeException(e); } Dmz(); } public static void Dmz() { for (int i = 1; i <= 5; i++) { System.out.println("세트 상품 포장 시작 " + i + "/5"); } System.out.println(" == 세트 상품 포장 완료 == "); } } class Pkg { public int number = 1; public void pack(String name) { // 직원 1 : 3번방 청소 완료 System.out.println(name + "상품 준비 " + number + "/5"); number++; } } 영상에서는 이전과 다르게 Runnable 인터페이스를 구현하여서? 하는걸 보았습니다 결과는 똑같이 나오는데 기능적으로나 프로그램적으로 어떠한 차이가 있는지 알려주시면 감사하겠습니다.

  • java
  • 객체지향
바갱 댓글 1 좋아요 0 조회수 142

java.lang.NumberFormatException: Cannot parse null string

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

강의를 듣다가 2024-08-07T11:08:47.538+09:00 ERROR 9788 --- [servlet] [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[memberSaveServlet] : Servlet.service() for servlet [memberSaveServlet] in context with path [] threw exception java.lang.NumberFormatException: Cannot parse null string at java.base/java.lang.Integer.parseInt(Integer.java:624) ~[na:na] at java.base/java.lang.Integer.parseInt(Integer.java:778) ~[na:na] at hello.servlet.basic.domain.web.servlet.MemberSaveServlet.service(MemberSaveServlet.java:25) ~[classes/:na] at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-10.1.26.jar:10.1.26] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.1.11.jar:6.1.11] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.11.jar:6.1.11] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.1.11.jar:6.1.11] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.11.jar:6.1.11] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.1.11.jar:6.1.11] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.1.11.jar:6.1.11] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:904) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) ~[tomcat-embed-core-10.1.26.jar:10.1.26] at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na] 2024-08-07T11:08:47.559+09:00 DEBUG 9788 --- [servlet] [nio-8080-exec-3] o.apache.coyote.http11.Http11Processor : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@330cc8fe:org.apache.tomcat.util.net.NioChannel@37334a47:java.nio.channels.SocketChannel[connected local=/[0:0:0:0:0:0:0:1]:8080 remote=/[0:0:0:0:0:0:0:1]:60555]], Status in: [OPEN_READ], State out: [CLOSED] 이라는 에러가 떴는데 int age = Integer.parseInt(request.getParameter("age"));에서 문제가 있다는것 같은데 아무리 확인해도 왜 오류가 뜨는건지 모르겠습니다...

  • spring
  • mvc
댓글 1 좋아요 0 조회수 764

Team 클래스에서 member를 List로 저장하는 이유

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

안녕하세요 강의 잘 보고있습니다! 다름아니라 Member 클래스에서는 List를 쓰지않고 Team team으로 객체를 저장하셨는데 Team 클래스에서는 List를 사용하여 member를 저장하는 이유가 궁금합니다. 팀이 1이고 멤버가 N이여서 팀에 여러명의 멤버가 들어갈 수 있으므로 List를 사용하신걸까요?

  • java
  • jpa
포닥 댓글 1 좋아요 0 조회수 224

한 부모테이블에 속한 자식 테이블들의 칼럼이 전부 NOT NULL일 경우

해결됨

자바 ORM 표준 JPA 프로그래밍 - 기본편

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] Item 부모 클래스를 Album , Book , Movie 자식 클래스들이 상속받는 상황에서 해당 자식 테이블들 칼럼들이 전부 NOT NULL일 경우 단일 테이블 전략을 쓰고 데이터를 삽입할 경우 다른 자식 객체에 값에 NULL이 들어감으로써 NOT NULL 조건을 위배하여 오류가 발생 즉 이럴 경우 JOINED 전략을 통해 칼럼들이 NOT NULL이어도 테이블이 자식 별로 분리돼서 생성됨에 따라 NOT NULL 조건을 위반하지 않고 원활하게 삽입될 수 있습니다. [핵심 질문] 하지만 규모가 크지 않은 프로젝트에서 선생님께서는 단일 테이블 전략이 좋다고 하셨는데, 규모가 크지 않은 프로젝트에서라도 일반적으로 칼럼들이 NOT NULL로 설정되는 경우가 많은데 이런 경우에는 불가피하게 무조건적으로 조인 전략(JOINED)을 채택해야하는지 여쭙고 싶습니다 !

  • java
  • jpa
경민 댓글 1 좋아요 0 조회수 168

인기 태그

인프런 TOP Writers

주간 인기글