묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
데이터베이스 생성한게 약간 복잡해졌습니다ㅠㅠ
==================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]원래는 Item테이블에 book, album, movie가 들어가야 하는데@Inheritance(strategy = InheritanceType.JOINED)를 입력해서 album, book등 테이블이 따로 생성이 되었습니다..그래서 다시 @Inheritance(strategy = InheritanceType.SINGLE_TABLE)로 바꾸고 새로고침해도 변한게 없어서spring.jpa.hibernate.ddl-auto=updatecreate에서 update로 바꾸고 재실행 했더니따로 테이블이 생성된게 남아있고 item에도 들어가 버렸습니다.. 이럴땐 테이블을 따로 삭제하는 방법밖에 없을까요??
-
미해결실전! Querydsl
querydsl 외래키제약조건
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/)[질문 내용]JPA를 사용하는데외래키를 설정안하고 사용하는 경우가 있을까요? 제 질문은 A테이블 과 B테이블이 부모 자식 관계인데외래키 제약조건을 걸지 않고 사용하는 경우입니다. JPA에선 각 엔티티가 연결고리가 없는 경우입니다A엔티티(B엔티티로 가는 필드없음)B엔티티 (A엔티티로 가는 필드없음)이런식으로
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
IllegalStateException
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니요)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의들으면서 코드를 따라쳐도 안되서 프로젝트 파일 삭제후 강의 자료에 있는 코드들을 복사해서 해도 계속 같은 오류가 나옵니다. 해결방법 알려주시면 감사하겠습니다!
-
해결됨실전! Querydsl
테스트 메서드 이름은 왜 스네이크 인가요??!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요.자바는 보통 카멜케이스를 쓴다고 알고 있고,영한님도 메서드명이나 클래스명에 카멜케이스를 그동안 쓰셨던거 같은데테스트 메서드는 왜 스네이크로 쓰시나요??코드가 달라지는 건 아니지만.. 궁금해서요 전에 영한님이 클라이언트도 다 한국이면 한글로도 쓰기도 한다고 하셨던거같은데..테스트는 스네이크로 쓰는 것이 국룰인가요?!
-
미해결실전! 스프링 데이터 JPA
의존성 관련 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 의존성에 대해 갑자기 헷갈려서 총 4가지 질문드립니다.MemberService에 아래와 같은 메서드(Member findMemberById(Long id))가 있고 PostService(다른 Service 클래스)에서 memberId로 Member를 조회해야 할 일이 있습니다. 이 경우 아래 메서드를 이용하기 위해 PostService 클래스에서 private final MemberService memberService 형태로 멤버변수로 포함한다고 가정하겠습니다.(memberService.findMemberByMember(id) 로 이용하기위해)public Member findMemberById(Long id) { return memberRepository.findById(id) .orElseThrow(() -> new BusinessLogicException(MEMBER_NOT_FOUND)); } Q1) PostService에서 MemberService를 생성자 주입을 통해 받아서 이용할 경우 MemberService의 의존성(예를 들면 MemberRepository 등의 MemberService 클래스에서 사용하는 클래스들)까지 PostService에 포함되는 것일까요? Q2) 의존성이라는게 단순히 생성자 주입으로 받았던 멤버 클래스들 뿐 아니라 내부 메소드에서 매개변수로 받은 클래스가 있다면 이 또한 의존성인가요?(import 로 포함된 클래스들을 모두 의존클래스로 보면 될지, 아니면 내부에서 사용하는 모든 객체를 의존성으로 보면될지 >> 같은 패키지의 경우 import 안하는걸 고려했을때 내부에서 객체로 이용하지만 같은 패키지라 import 안되는걸 고려) Q3-1) Q1의 답변에서 MemberService의 의존성까지 PostService에 포함되는 거라면 PostService에서 Member를 조회하기 위해서는 memberService.findMemberById(id) 로 조회하기 보단 MemberRepository를 주입받아서 memberRepository.findById(id).orElseThrow(() -> new BusinessLogicException(MEMBER_NOT_FOUND)); 형태로 변경하는게 맞을지? Q3-2) Q1의 답변에서 MemberService의 의존성까지 PostService에 포함되는게 아니라면 PostService에서 MemberService가 아닌 MemberRepository로 조회하는게 맞을지? Member 조회가 여러곳에서 사용되고 Member findMemberById(Long id) 메소드의 내용이 여러곳에서 중복되는 걸 생각했을때처음에는 단순히 member 조회가 여러곳에서 일어나고 공통된 내용이 반복되어 MemberService의 findMemberById 로 묶어서 사용하는게 맞다고 생각했는데 의문이 들었고 예전에 의존성은 최대한 줄이라고 하셨던게 생각나서 질문드립니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
test파일의 application.yml 내용 없는경우
test디렉토리의 resouces패키지를 만들고, 그 안에 application.yml 을 생성해서 인메모리모드를 보여주셨습니다.아무 코드가 없는 백지상태여도 인메모리모드로 돌아간다고 하셨는데요, 그래도 내용만 빌 뿐이지, 인메모리 환경을 위해서는 꼭 application.yml파일이 test디렉토리의 해당경로에 존재해야하는게 맞나요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
em.remove 동작 안함 이유?
Member.classpackage dev.devpool.domain; import javax.persistence.*; import java.util.ArrayList; import java.util.List; @Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "MEMBER_ID") private long id; @OneToMany(mappedBy = "member", cascade = CascadeType.ALL) List<Child> children = new ArrayList<>(); public List<Child> getChildren() { return children; } public void setChildren(List<Child> children) { this.children = children; } private String name; private String nickName; private String email; private String password; public Member() { } public Member(String name, String nickName, String email, String password) { this.name = name; this.nickName = nickName; this.email = email; this.password = password; } public long getId() { return id; } public void setId(long id) { this.id = id; } public void setName(String name) { this.name = name; } public String getName() { return name; } public String getNickName() { return nickName; } public void setNickName(String nickName) { this.nickName = nickName; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } Child.classpackage dev.devpool.domain; import javax.persistence.*; @Entity public class Child { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; @ManyToOne @JoinColumn(name = "MEMBER_ID") private Member member; public long getId() { return id; } public void setId(long id) { this.id = id; } public Member getMember() { return member; } public void setMember(Member member) { this.member = member; } }로 부모를 Member 자식을 Child로 만들고 delete 시 cascade가 적용되는지를 체크하려 하였습니다. MemberRepository에서 delete 쿼리를 아래와 같이 작성하였습니다.Test 코드는 아래와 같습니다.@Test public void ss() { Member member = new Member(); member.setName("김우"); member.setEmail("rereers15@naver.com"); member.setPassword("taeu4"); member.setNickName("귀요미"); Child child = new Child(); child.setMember(member); member.getChildren().add(child); memberService.join(member); em.flush(); em.clear(); System.out.println("================"); memberService.delete(member.getId()); System.out.println("================"); } SQL 하지만 em.remove 부분이 동작하지 않습니다.이유가 무엇인가요? ** save메서드에서 저장 후 remove()를 하는 것을 실험해보았는데 이 경우는 delete 쿼리까지 정상 출력됩니다. 영속성 컨텍스트와 @Transaction과 관련된 이슈인 것같은데 이와 관련해서 설명해주시면 감사하겠습니다.
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
415 오류가 자꾸 발생합니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] Postman에서 send를 해도 아래와같은 오류가 발생하며 실행되지 않습니다. Headers에서 Context-Type이 분명 application/json인데 뭐가 문제일까요 x-www-form-urlencoded로 변경하고 Context-Type도 이와 같이 변경한 후에 @RequestBody를 지우면 데이터가 잘 들어오는 것을 확인할 수 있었습니다. 2023-03-29 19:41:13.746 WARN 13008 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/json;charset=UTF-8' not supported]2023-03-29 19:41:13.780 WARN 13008 --- [nio-8080-exec-1] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation]아래는 제 코드와 헤더입니다.
-
미해결실전! Querydsl
조인을 통해서 값을 가고올 수 있는거는 알겠습니다
근데 만약QMemberTeamDto에List<String> 형식이 있을 땐이 값을 어떻게 해야 갖고올 수 있는 건가요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
컬럼명 앞에 테이블명 붙이는 방법
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]테이블 명이 member이고 컬럼명이 name이면 테이블이 생성될때 컬럼명이 member_name으로 모든 컬럼 앞에 테이블명이 자동으로 생성되는 어노테이션을 들었던 기억이 있는데 어떤 어노테이션이었는지 기억이 잘 안납니다.. 도와주실 수 있을까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
Entity Builder 패턴과 값 수정 관련해서 질문드립니다.
Entity의 경우 불변성을 위해 Setter를 사용하지 않고 Builder패턴을 사용중인데요.불편한점이 생겼습니다. 회원 Entity의 경우 필드가 30개 정도 되는데요.패스워드 3회 실패 시 상태값(isActive) 필드만 수정을 하고 싶은데Setter가 있다면 해당 회원ID로 조회 후 memberEntity.setIsActive(False)로 입력해주면DirtyChecking으로 간단하게 원하는 로직이 구현되는데builder 패턴이다 보니 아래 처럼 구현을 하고 있습니다.MemberEntity originMember = memberRepository.findById(memberId);MemberEntity memberForUpdate = MemberEntity.builder().id(originMember.getId()).address(originMember.getAddress()).isActive(true)...........build();memberRepository.save(memberForUpdate );이런 경우에 Builder패턴을 사용하면서 좋은 해결책이 있을까요? 상태와 관련된 필드만 @Setter를 넣자니(제 짧은 생각이지만 changeStatus method로 필드값 변경하는 방법도 setter와 동일해보입니다. 오히려@Setter가 코드간결성에서 더 좋아보이는 제 생각입니다.)해당 필드도 무분별하게 변경이 되면 안되는 중요한필드라 애매한 상황입니다. 도와주세요 !
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
안녕하세요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]11분 50초 쯤 요즘 세션 객체를 안쓴다고 하셨는데 그럼 토큰으로 인증을 주로 하는 건가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
MemberRepository 터미널 세팅 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]➜ libs java -jar jpashop-0.0.1-SNAPSHOT.jar . ____ _ /\\ / ___'_ __ (_)_ _ \ \ \ \( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.7.10)2023-03-29 10:00:16.420 INFO [,,] 33389 --- [ main] jpabook.jpashop.JpashopApplication : Starting JpashopApplication using Java 17.0.6 on yunsang-yeon-ui-MacBookAir.local with PID 33389 (/Users/sangyeon/Desktop/study/jpashop/build/libs/jpashop-0.0.1-SNAPSHOT.jar started by sangyeon in /Users/sangyeon/Desktop/study/jpashop/build/libs)2023-03-29 10:00:16.422 INFO [,,] 33389 --- [ main] jpabook.jpashop.JpashopApplication : No active profile set, falling back to 1 default profile: "default"2023-03-29 10:00:17.075 INFO [,,] 33389 --- [ main] o.s.cloud.context.scope.GenericScope : BeanFactory id=7e250d03-eb6b-3405-9b07-0ce9cd1e93022023-03-29 10:00:17.575 INFO [,,] 33389 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)2023-03-29 10:00:17.583 INFO [,,] 33389 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]2023-03-29 10:00:17.583 INFO [,,] 33389 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.73]2023-03-29 10:00:17.641 INFO [,,] 33389 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext2023-03-29 10:00:17.642 INFO [,,] 33389 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1180 ms2023-03-29 10:00:18.403 INFO [,,] 33389 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''2023-03-29 10:00:18.420 INFO [,,] 33389 --- [ main] jpabook.jpashop.JpashopApplication : Started JpashopApplication in 2.308 seconds (JVM running for 2.591)2023-03-29 10:00:27.868 INFO [,06eafb76d211bbc3,06eafb76d211bbc3] 33389 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'2023-03-29 10:00:27.868 INFO [,06eafb76d211bbc3,06eafb76d211bbc3] 33389 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'2023-03-29 10:00:27.869 INFO [,06eafb76d211bbc3,06eafb76d211bbc3] 33389 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms 이렇게 나오고 local host 8080에 들어가니Whitelabel Error PageThis application has no explicit mapping for /error, so you are seeing this as a fallback.Wed Mar 29 10:00:27 KST 2023There was an unexpected error (type=Not Found, status=404).이렇게 뜹니다.
-
미해결실전! Querydsl
build관련 질문드립니다.
안녕하세요 영한님.스프링 입문 로드맵부터 지금까지 정말 좋은 강의 감사합니다.로컬에서는 compileQuerydsl도 정상적으로 작동되고 Q클래스도 잘 생성 되는데 결국에 배포를 하기 위해서는 build를 해야 하는데 해당 부분에서 계속 문제가 생겨서 질문드립니다.아래는 설정파일입니다.querydsl관련 중복 에러만 발생하여 다른 라이브러리는 제외하고 해당 부분만 올렸습니다. buildscript { ext { queryDslVersion = "5.0.0" } } plugins { id 'java' id 'org.springframework.boot' version '3.0.3' id 'io.spring.dependency-management' version '1.1.0' id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" } group = 'heyuniverse' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta" annotationProcessor "jakarta.persistence:jakarta.persistence-api" annotationProcessor "jakarta.annotation:jakarta.annotation-api" } tasks.named('test') { useJUnitPlatform() } def querydslDir = "$buildDir/generated/querydsl" clean { delete file(querydslDir) } querydsl { jpa = true querydslSourcesDir = querydslDir } sourceSets { main.java.srcDir querydslDir } configurations { querydsl.extendsFrom compileClasspath } compileQuerydsl { options.annotationProcessorPath = configurations.querydsl }distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip아래는 배포를 위해 build시 발생하는 에러 로그입니다.> Task :compileJava FAILEDDeprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.See https://docs.gradle.org/7.6/userguide/command_line_interface.html#sec:command_line_warnings3 actionable tasks: 3 executedFAILURE: Build failed with an exception.* What went wrong:Execution failed for task ':compileJava'.> Compilation failed; see the compiler error output for details.Attempt to recreate a file for type xxxx.xxxx.QClassAttempt to recreate a file for type xxxx.xxxx.QClassAttempt to recreate a file for type xxxx.xxxx.QClassAttempt to recreate a file for type xxxx.xxxx.QClass인텔리제이 ,gradle 양쪽 다 캐쉬 삭제 후 실행 해봐도 결과는 같았고,gradle 버전이 문제인가 하여 8.0으로 업그레이드 해봐도 해결이 되지는 않았습니다.이틀 넘게 종일 매달려봐도 도무지 질문할 곳이 없어서 남겨봅니다 ,,
-
미해결실전! Querydsl
DTO .as 질문입니다
다른 분이 올린 질문이랑 같은 내용입니다.5분 30초정도에 생성자 방식으로 했기 때문에 as쓸 필요 없이 타입만 맞으면 된다고 하는데, 제가 Projections.constructor로 실험해봤는데member.id.as("asdasd") 이렇게 넣어도 잘 작동하는데이거에 대한 이유를 알고 싶습니다
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
testMember 실행 오류
강의를 따라하어 testMember를 실행해서 h2 db에서 member 테이블이 생성되고 memberA 까지 추가된것을 확인한 후에 코드를 수정하지 않고 한번 더 돌렸는데 그때 부터 계속 저런 오류가 발생합니다.혹, DB에 이미 테이블이 생성되어서 그런것인가요? 아니면 다른 문제가 있는건가요?
-
해결됨실전! Querydsl
3분 10초 질문입니다
@Data를 무조건 써야되는 건가요?@Setter는 웬만하면 사용 안 하는게 좋다고 들었는데@Setter가 없으면 Condition값이 파라미터로 안 넘어옵니다..해결 방법이 있을까요?
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
distinct를 적용하지 않았을 때의 결과 관련
강의를 중간에 distinct를 적용하지 않으면 포스트맨에서 결과가 중복되게 나오고, 쿼리도 inner join으로 되어야 하는데 이상합니다ㅜ코드가 모두 동일한데, 콘솔에 찍어봐도 4건이 아닌 2건 밖에 조회가 되지 않고 결과도 2건으로 나옵니다..또한, 강의에서는 inner join이 나가는데 제 코드는 join이 나갑니다..뭐가 문제일까요?
-
미해결더 자바, 코드를 조작하는 다양한 방법
'클래스 로더' 강의에서 클래스 로딩을 설명할 때 잘못된 것 같아 질문드립니다.
클래스로딩을 진행할 때 먼저 자식 클래스로더가 찾아보고 찾지 못할 경우 부모 클래스로더에게 위임하는 것으로 '자바 성능 최적화' 라는 책에서 배웠습니다. 하지만 강의에서 08분02초부터 클래스로딩 개념을 설명해주실 때 제일 먼저 부모 클래스로더에게 위임한다고 설명해주시는데 이 개념이 잘못된 개념인 것 같아 조심스럽게 질문남깁니다. chatGPT에게 물어봤을 때도 동일하게 자식 클래스로더가 먼저 찾아보고 부모에게 위임한다고 답변을 줍니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
"item.orderItems[0].item.name" 질문 관련
https://drive.google.com/file/d/1OKpCQpwYWvWjppEIcvzWpSZKy09GAivy/view?usp=sharing위에는 구글 압축 파일입니다.다음은 에러 내용입니다.Caused by: org.attoparser.ParseException: Exception evaluating SpringEL expression: "item.orderItems[0].item.name" (template: "order/orderList" - line 46, col 21)Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1025E: The collection has '0' elements, index '0' is invalid 야생형 코스로 들으려고 하다보니 에러난 부분을 고치기가 어렵고 다른 분들도 같은 질문을 많이 하셨어서, 질문들도 다 확인해보고 저의 코드에서도 해당 부분들을 유심히 보았으나 에러를 잡지 못해서 질문드렸습니다. 위의 에러코드 내용을 미루어보아 orderItems의 값이 null이어서 화면에 나오지 않는다고 생각하여서 그 부분을 확인해보았는데, null로 출력되는 것은 확인하였습니다. html코드의 문제인가 싶어 코드도 계속 확인해보고, 선생님께서 제공해주신 코드파일에 있는 html을 그대로 복사해서 실행해보았는데도 수정이 되지 않아서 질문드렸습니다. 감사합니다. Whitelabel Error PageThis application has no explicit mapping for /error, so you are seeing this as a fallback.Tue Mar 28 19:44:33 KST 2023There was an unexpected error (type=Internal Server Error, status=500).An error happened during template parsing (template: "class path resource [templates/order/orderList.html]")org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "class path resource [templates/order/orderList.html]") at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:241) at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parseStandalone(AbstractMarkupTemplateParser.java:100) at org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:666) at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1103) at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1077) at org.thymeleaf.spring6.view.ThymeleafView.renderFragment(ThymeleafView.java:372) at org.thymeleaf.spring6.view.ThymeleafView.render(ThymeleafView.java:192) at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1415) at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1159) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1098) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:974) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1011) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:537) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:631) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:166) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:894) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:833) Caused by: org.attoparser.ParseException: Exception evaluating SpringEL expression: "item.orderItems[0].item.name" (template: "order/orderList" - line 46, col 21) at org.attoparser.MarkupParser.parseDocument(MarkupParser.java:393) at org.attoparser.MarkupParser.parse(MarkupParser.java:257) at org.thymeleaf.templateparser.markup.AbstractMarkupTemplateParser.parse(AbstractMarkupTemplateParser.java:230) ... 48 more Caused by: org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "item.orderItems[0].item.name" (template: "order/orderList" - line 46, col 21) at org.thymeleaf.spring6.expression.SPELVariableExpressionEvaluator.evaluate(SPELVariableExpressionEvaluator.java:292) at org.thymeleaf.standard.expression.VariableExpression.executeVariableExpression(VariableExpression.java:166) at org.thymeleaf.standard.expression.SimpleExpression.executeSimple(SimpleExpression.java:66) at org.thymeleaf.standard.expression.Expression.execute(Expression.java:109) at org.thymeleaf.standard.expression.Expression.execute(Expression.java:138) at org.thymeleaf.standard.processor.AbstractStandardExpressionAttributeTagProcessor.doProcess(AbstractStandardExpressionAttributeTagProcessor.java:144) at org.thymeleaf.processor.element.AbstractAttributeTagProcessor.doProcess(AbstractAttributeTagProcessor.java:74) at org.thymeleaf.processor.element.AbstractElementTagProcessor.process(AbstractElementTagProcessor.java:95) at org.thymeleaf.util.ProcessorConfigurationUtils$ElementTagProcessorWrapper.process(ProcessorConfigurationUtils.java:633) at org.thymeleaf.engine.ProcessorTemplateHandler.handleOpenElement(ProcessorTemplateHandler.java:1314) at org.thymeleaf.engine.OpenElementTag.beHandled(OpenElementTag.java:205) at org.thymeleaf.engine.Model.process(Model.java:282) at org.thymeleaf.engine.Model.process(Model.java:290) at org.thymeleaf.engine.IteratedGatheringModelProcessable.processIterationModel(IteratedGatheringModelProcessable.java:368) at org.thymeleaf.engine.IteratedGatheringModelProcessable.process(IteratedGatheringModelProcessable.java:222) at org.thymeleaf.engine.ProcessorTemplateHandler.handleCloseElement(ProcessorTemplateHandler.java:1640) at org.thymeleaf.engine.TemplateHandlerAdapterMarkupHandler.handleCloseElementEnd(TemplateHandlerAdapterMarkupHandler.java:388) at org.thymeleaf.templateparser.markup.InlinedOutputExpressionMarkupHandler$InlineMarkupAdapterPreProcessorHandler.handleCloseElementEnd(InlinedOutputExpressionMarkupHandler.java:322) at org.thymeleaf.standard.inline.OutputExpressionInlinePreProcessorHandler.handleCloseElementEnd(OutputExpressionInlinePreProcessorHandler.java:220) at org.thymeleaf.templateparser.markup.InlinedOutputExpressionMarkupHandler.handleCloseElementEnd(InlinedOutputExpressionMarkupHandler.java:164) at org.attoparser.HtmlElement.handleCloseElementEnd(HtmlElement.java:169) at org.attoparser.HtmlMarkupHandler.handleCloseElementEnd(HtmlMarkupHandler.java:412) at org.attoparser.MarkupEventProcessorHandler.handleCloseElementEnd(MarkupEventProcessorHandler.java:473) at org.attoparser.ParsingElementMarkupUtil.parseCloseElement(ParsingElementMarkupUtil.java:201) at org.attoparser.MarkupParser.parseBuffer(MarkupParser.java:725) at org.attoparser.MarkupParser.parseDocument(MarkupParser.java:301) ... 50 more Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1025E: The collection has '0' elements, index '0' is invalid at org.springframework.expression.spel.ast.Indexer$CollectionIndexingValueRef.growCollectionIfNecessary(Indexer.java:700) at org.springframework.expression.spel.ast.Indexer$CollectionIndexingValueRef.getValue(Indexer.java:664) at org.springframework.expression.spel.ast.Indexer.getValueInternal(Indexer.java:102) at org.springframework.expression.spel.ast.CompoundExpression.getValueRef(CompoundExpression.java:61) at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:91) at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:112) at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:338) at org.thymeleaf.spring6.expression.SPELVariableExpressionEvaluator.evaluate(SPELVariableExpressionEvaluator.java:265) ... 75 more