안녕하세요. 컬렉션값 명시적 조인에 대해서 select t.members.username from Team t 는 실패하고, select m.username from Team t join t.members m 은 성공한다고 하셨는데, 여기서 해당 jpql을 실행했을때 변환되는 SQL에 대해서 이해가 가지않는 부분이 있어서 구글링을 통해 찾아보면서 아래와 같이 정리해봤는데, 이렇게 이해하는게 맞을까요?? select t.members.username from Team t 형태로 하면 안된다. 대신에 select m.username from Team join t.members m 형태로 해야한다. select m.username from Team join t.members m를 실행하면 SELECT m.username FROM team t JOIN member m ON t.id = m.team _id 쿼리로 변환되서 실행된다. 여기서, 1.t.members가 member로 변환되는 이유는 컬렉션 필드 members의 제네릭 타입이 Member이기 때문이다. t.members는 Team 객체가 갖는 List<Member> 컬렉션이다. 이 컬렉션은 결국 Member 엔티티에 해당하는 테이블 , 즉 member 테이블의 여러 행들을 의미한다. 따라서 JPA는 join t.members를 Member 엔티티 대상으로 join하는것으로 해석하고, SQL에서는 member 테이블로 변환된다. 2.ON t.id = m.team _id가 추가되는 이유는 Team의 members와 Member의 team이 연관관계인 상태이기 때문이다. 3.from 뒤에는 엔티티객체만 적을수 있는데, join 뒤에는 엔티티객체뿐만 아니라 엔티티객체의 연관필드도 적을수 있다. 하지만 이때는 반드시 경로표현식 형태인 .을 통해 나타내야한다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 제가 부트캠프에서 프로젝트를 진행할 때 테스트 코드를 짜긴 했었는데 거의 지식 없이 짰던지라 controller랑 service만 단위 테스트로 짰고 통합 테스트는 안 했습니다. 단위 테스트는 class 단위 어노테이션에 SpringBootTest를 안 쓰는게 맞는건가요? 제가 그렇게 했었거든요. @SpringBootTest는 통합 테스트일 때만 쓰는 건지, 어떤 경우에 쓰는 어노테이션인 지 궁금합니다.
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] AnimalHospitalMainV0의 개 타입 반환 주석 밑에 dogHospital .set( dog );을 또 하는 이유가 있나요? 개 병원 주석 밑에 dogHospital .set( dog );가 이미 있는데 중복이 아닌지..??
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다! [코드팩토리 디스코드] https://bit.ly/3HzRzUM - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. webview_flutter 패키지의 다큐멘테이션이 업데이트된건지 android 폴더 속 파일의 내용을 바꿔야하는 부분이 사라졌습니다. 그래서 일단 그 부분은 건드리지않고 그대로 강의를 따라했는데요. 에뮬레이터에서 돌리니까 오류가 뜨고, 콘솔에서 해결책으로 build.gradle파일의 android { ndkVersion = "27.0.12077973" } 이렇게 바꾸래서 바꿨고 결국에 에뮬레이터에서 정상적으로 작동했습니다. 물론 이번 강의에서는 이 부분만 빼놓고 나머지는 잘 이해하고 구현해보고했습니다만, 앞으로 저 혼자 개발할 때 이런 일이 발생하면 (다큐멘테이션에선 없는 내용으로 오류가 발생하고, 콘솔에서 해결책을 제시해줬지만, 정확히 내가 뭐가 문제이고 왜 해결되었는지 모르는 상황인데 어떻게든 해결은 된 상황, 뭐가 문제인지 모르는 상황이라 언제든 다시 발생할 수 있음) 어떻게 해야하는지 좀 난감하네요. 실무에서는 어떤 식으로 대처하는지 궁금합니다. 콘솔 메시지를 분석하고 공부하는 게 최선일까요?
예제에서는 equals 함수를 새로 만들어서 person1과 person2를 비교하는 상황이라 true가 나오는 것으로 이해했습니다. 그럼 equals 함수를 따로 만들지 않은 상태에서 person1과 person2를 equals로 비교하면 그 경우에는 true가 나오나요 false가 나오나요?
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/ 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/ 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/ [질문 내용] 여기에 질문 내용을 남겨주세요. 질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/ 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/ 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/ 프로젝트 생성의 13:24의 실행이 되지 않습니다. Cause: class java.util.concurrent.ExecutionException cannot be cast to class java.lang.RuntimeException (java.util.concurrent.ExecutionException and java.lang.RuntimeException are in module java.base of loader 'bootstrap') java.lang.IllegalArgumentException: Could not create problems-report directory '/build/reports/problems' * 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.org . 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.13/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation. BUILD FAILED in 55ms 1 actionable task: 1 executed 두가지의 오류가 뜨는데 어떻게 해결해야할까요?
for문에서 i가 14가 되는 순간 널문자를 만나서 for문을 빠져나오게 되는데 메인함수에서 i를 따로 초기화한 값이 없기 때문에 i에 14가 유지되어서 myCar.mode[i] = '\0'; 이 식에 14가 들어가게 되는건가요? for문을 빠져나오는 순간 i는 따로 초기화가 되는 것이 아닌가요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 현재 주문 기능 테스트에서 JUnit5를 이용하여 테스트 중입니다. 앞선 강의(회원 기능 테스트)에서 JUnit으로 테스트할때 메모리 DB 사용한다고 application.yml 을 test 쪽에 복사해서 사용할때도 url: jdbc:h2:mem:testdb 부분을 주석해도 돌아간다고 했었던 것으로 기억이 납니다. 그래서 TEST 시에는 DB를 연결 안해도 무방하다고 생각하고 있었는데요. 오늘 주문 기능 테스트시 DB 끄고 했더니 에러가 나서 DB 연결했더니 정상적으로 동작합니다. TEST에서도 DB를 연결해주어야 하는 걸까요?
안녕하세요 함수와 재귀함수 (v2) 내용 중에 23:33 대신 주소값은 배열의 첫번째를 가리킬 것이다 라는 것만 알고 계시면 되겠습니다 여기서 배열의 첫번째 줄을 가르킨다고 말씀 하셨는데여 그러면 배열의 첫번째면 t 를 가르키게 되는데 여기서 출력할 때 %s(문자열)을 출력 하라고 해서 출력 값이 this is string2 인가요? 그러면 만약 %c를 출력 하라고 하였을 때 문자열 첫번째인 t 를 출력하면 되는건가요?
안녕하세요, 토비님 강의 정말 잘 보고 있습니다. 하나 궁금한 점이 있어서 질문드립니다. 헥사고날 아키텍처(Hexagonal Architecture)를 도입할 때, Specification 패턴 과 Strategy 패턴 을 함께 사용하는 것에 대해 어떻게 생각하시나요? 좋은 선택이 될 수 있을지, 아니면 둘 중 하나만 선택해서 사용하는 것이 더 나은 접근일지 고민하고 있습니다.두 패턴을 함께 사용하는 사례나 장단점에 대해 조언해주시면 감사하겠습니다.
maxVal 함수에서 int *arr이 배열을 가져옴으로써 arr은 1의 주소를 갖게되는데 int max = maxVal(arr, size-1); 에서 int max = maxVal(1의주소, 4);가 되면 그다음 maxVal( ,3); 여기에서 앞 부분에 뭐가 들어가게 되는 건가요? 그리고 어떻게 배열이 계속 들어가게 되나요?