묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
git에서 커밋을 했는데, 계속 진행해도 되는지의 여부
40강. git 기초사용법을 듣고 있습니다. 코드를 github에 올리는 과정에서 처음에는 git add . 작성 시 아래와 같이 에러가 나타났습니다위와 같은 과정을 거쳤고, 커밋이 반영된듯 싶으면서도 fatal: unknown write failure on standard output이라는 문구가 떠 다음 과정을 진행하기 찝찝합니다. 이전에 git add .시 실행은 된 것 같지만 warning이 난것도 나중에 문제가 될것 같습니다..감사합니다.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
<WHERE>태그 대신
<WHERE>태그 대신 WHERE 1=1 주고 강제적으로 true 준 이후에 and조건을 <if>안에 사용하는데 그게 더 안좋은 방법일까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
Oracle12cDialect 오류 해결 방법
(사진)
-
해결됨실전! 스프링 데이터 JPA
gavlyukovskiy 의존성을 추가했는데도 파라미터 로그가 보이지 않슴니다.
안녕하세요 다음과 같이 의존성을 했지만 보이지 않습니다. 무슨 문제가 있을까요?다음과 같이 로그가 뜨며 현재 psy 관련 로그는 보이지 않습니다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.7' }
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
다대다를 위해서 MemberProduct테이블을 만들어서 다대1로 할때 mapper를 어느 테이블로 해줘야하나오?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]membreproduct 클래스를 만들어서member클래스와 다대일을 할때두클래스중에 어느 클래스에 mapper를 넣어야하고 주인을 설정해야할지 갑자기 뇌정지가 와 버렸습니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
TABLE_PER_CLASS 전략을 사용했는데 ITEM 테이블이 생겨요.
// JpaMain.javapackage hellojpa; import jakarta.persistence.*; import java.util.List; public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); //code try { Movie movie = new Movie(); movie.setDirector("aaaa"); movie.setActor("bbbb"); movie.setName("바람과함께사라지다"); movie.setPrice(10000); System.out.println("=== BEFORE ==="); em.persist(movie); System.out.println("=== AFTER ==="); System.out.println("movie.getId() = " + movie.getId()); em.flush(); em.clear(); System.out.println("movie.getId() = " + movie.getId()); Movie findMovie = em.find(Movie.class, movie.getId()); tx.commit(); } catch (Exception e) { tx.rollback(); } finally { em.close(); } emf.close(); } } // Item.javapackage hellojpa; import jakarta.persistence.*; @Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) public abstract class Item { @Id @GeneratedValue private Long id; private String name; private int price; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } } // Book.javapackage hellojpa; import jakarta.persistence.DiscriminatorValue; import jakarta.persistence.Entity; @Entity public class Book extends Item { private String author; private String isbn; } // Movie.javapackage hellojpa; import jakarta.persistence.DiscriminatorValue; import jakarta.persistence.Entity; @Entity public class Movie extends Item { private String director; private String actor; public String getDirector() { return director; } public void setDirector(String director) { this.director = director; } public String getActor() { return actor; } public void setActor(String actor) { this.actor = actor; } } // Album.javapackage hellojpa; import jakarta.persistence.DiscriminatorValue; import jakarta.persistence.Entity; @Entity public class Album extends Item { private String artist; } TABLE_PER_CLASS 전략을 사용했는데도 ITEM 테이블이 생기고 ITEM 테이블에 값이 들어갔는데 왜 이러는 건가요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
다대다 부분이랑 이해가 안되는부분 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]다대다를 하는데@jointable로 새로운 테이블을 만드는건 이해하는데새로운 테이블에 외래키를 넘겨주는데왜 한쪽 테이블에서는 mapper를 왜 쓰는지 이해가 안되네요. 예) Category 클래스안에 다대다라jointable를 사용해 새로운 테이블을 만든건 이해하는데근데 item클래스는 새로운 테이블에 외래키로 넘기는데item클래스는 도대체 mapper를 왜 쓰는건가요?이부분이 자세히 안 나와 있어서 의문만 생기네요 단순히 mapper가 읽기전용으로 쓰는걸로 아는데다대다 여기서는 그림조차 그려지지가 않네요ㅠㅠitem은 읽기전용? category를 주인장? 인건가요? parent: category child: list 이건 뭔가요? 다른클래스랑 연관관계도 없는데 갑자기 추가되서 혼동이 되네요 category_ITEM 테이블이 만들어지면서 category_ID, Item_ID가 자동으로 만들어지는데 저희가 컬럼을 만들지도않았는데 어떻게 자동으로 만들어지는지 어디부분에서 이루어지는건지 모르겠네요
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
DB저장시 이전 내용 삭제 됨
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]현재 Hello JPA - 애플리케이션 개발 강의를 수강 중입니다.12:50에서 2L과 HelloB로 해서 돌렸는데 1, HelloA가 사라지고 2, HelloB가 들어갑니다.강의에서는 1, HelloA가 남아있는데 혹시 제가 뭘 잘못 설정한걸까요? 콘솔창에Hibernate: drop table if exists Member cascade 라고 뜨긴합니다..
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
값 타입의 비교 ==과 equals부분이 이해가 안갑니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]전에 배웠던 내용과 혼란이 와서 문의남깁니다!값 타입의 비교를 수강 중동일성(identity) 비교 : 인스턴스의 참조 값을 비교, ==사용동등성(equivalence) 비교 : 인스턴스의 값을 비교, equals 사용 이라고 가르쳐 주셨는데 int, char같은 기본형 타입은 call by value로 인스턴스의 값을 비교하고 ==을 사용하지 않나요?그리고 String의 경우 참조형으로 call by Reference로 인스턴스의 참조 값을 비교하고 equals를 사용하는 것으로 알고 있는데 이 부분이 헷갈려서 정리가 잘 안됩니다 ㅠㅠ 설명 해주시면 감사하겠습니다! ==============="인스턴스"를 간과하고 있었네요 이해 되었습니다!
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
./gradlew build -x test 질문
Exception in thread "main" java.io.IOException: No space left on deviceat java.base/java.io.FileOutputStream.writeBytes(Native Method)at java.base/java.io.FileOutputStream.write(FileOutputStream.java:354)at java.base/java.io.BufferedOutputStream.write(BufferedOutputStream.java:123)at org.gradle.wrapper.Download.downloadInternal(Download.java:119)at org.gradle.wrapper.Download.download(Download.java:80)at org.gradle.wrapper.Install$1.call(Install.java:83)at org.gradle.wrapper.Install$1.call(Install.java:63)at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:69)at org.gradle.wrapper.Install.createDist(Install.java:63)at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:107)at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:63)이런 에러가 뜹니다.. 그 이전과 다르게 진행했던 것은 [ec2-user@ip-172-31-36-164 library-app]$ sudo dd if=/dev/zero of=/swaplife bs=128M count=16여기서 swaplife가 오타가 나서 [ec2-user@ip-172-31-36-164 library-app]$ sudo dd if=/dev/zero of=/swapfile bs=128M count=32swapfile로 바꾸어 다시 진행을 했습니다. dd: error writing '/swapfile': No space left on device29+0 records in28+0 records out이 상태에서 다시 지우고 어떻게 처음부터 시작할 수 있을까요..?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
아직까지는 JPA가 어떤 장점이 있는지 모르겠네요.
열심히 JPA강의 잘 듣고 있습니다. DB테이블은 FK로 연결되어 양방향 1개객체기준으론 단방향 2개, 주인 개념까지는 알겠습니다.분명 컨트롤은 앞선 강의에서 주인에서만 수정 가능한 걸로 알고 있는데.. 갑자기 read만 된다고 했던 거에 team쪽 member객체 세팅??영속성 컨텍스트에 없으니 객체개념에선 양쪽 다 값을 세팅해야한다는게 규칙 일관성이 없는 느낌이네요.테이블 2개 하는데도 신경 쓸 포인트가 요런데.. 테이블 10개 조인하면 이거 생각하다가 시간을 소비할 거 같은 느낌이 드네요.테이블 10개 조인시엔 부모, 자식 테이블 중에 FK갖고 있는 바닥자식이 주인이 될거 같은데요. 그렇다는건 2개씩 조인이 되는 양쪽 객체에 전부 세팅 해야할거같은 느낌적인 느낌.. JPA는 초짜라 제가 이해한 게 맞을까요?지적 부탁드립니다. 쿼리를 작성하지 않는 부분은 큰 장점이나 쿼리작성할 많은 부분을 결국 객체에 문법을 적용하는 느낌이라 아직은 장점을 잘 모르겠네요 ㅜㅜ.. 테이블 스키마를 보고 객체설계를 해야한다라는게 공수가 더 드는게 아닌가 생각되네요.
-
미해결1시간만에 끝내는 spring boot rest api 서비스 개발
QuickMapper를 찾을 수 없다는 오류가 뜹니다. @Autowired 사용에 문제가 있는 걸까요?
안녕하세요?강의 내용이 너무 좋아서 빠져서 듣고 있습니다.그런데 mybatis연결 과정에서 QuickMapper interface와 xml연결하는 부분 수업 중에 아래와 같은 에러가 발생했습니다. 에러 내용만 보면 Service 에서 QuickMapper를 @Autowired하는 부분부터 문제가 생기는 것 같은데 해결방법을 모르겠습니다.현재 에러가 나는 상태로 git에 소스 올려두었습니다.https://github.com/ljpson/quickstart.git에러 내용은 아래와 같습니다. 2024-04-03T11:20:24.392+09:00 WARN 74964 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'quickController': Unsatisfied dependency expressed through field 'quickService': Error creating bean with name 'quickService': Unsatisfied dependency expressed through field 'quickMapper': No qualifying bean of type 'com.helloworld.quickstart.mapper.QuickMapper' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}2024-04-03T11:20:24.395+09:00 INFO 74964 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat]2024-04-03T11:20:24.404+09:00 INFO 74964 --- [ main] .s.b.a.l.ConditionEvaluationReportLogger :Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.2024-04-03T11:20:24.418+09:00 ERROR 74964 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :***************************APPLICATION FAILED TO START***************************Description:Field quickMapper in com.helloworld.quickstart.service.QuickService required a bean of type 'com.helloworld.quickstart.mapper.QuickMapper' that could not be found.The injection point has the following annotations:- @org.springframework.beans.factory.annotation.Autowired(required=true)Action:Consider defining a bean of type 'com.helloworld.quickstart.mapper.QuickMapper' in your configuration.Process finished with exit code 1
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
dataSource 우선순위(?)
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]ItemServiceApplication에 test일때만 dataSource를 직접 정의해주었는데인메모리 DB가 properties에 정의한 datasource보다 우선되는건가요?h2 서버 끄고 properties는 그대로 둔 채 돌려도 정상작동 하는 것으로 봐선 properties의 datasource는 아예 시도를 안 하는 것 같은데...인메모리가 있으면 무시하고 넘어가는 것인지 궁금합니다!
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
40강 개인 DB 비밀번호만 가리기
안녕하세요 강의 잘 듣고 있습니다.git Push까지 잘 됐는데 github에서 application.yml까지 올라간 것을 확인 했습니다. 여기서 제 비밀번호만 가리고 나머지 설정은 공유하고 싶은데 따로 비밀번호만 분리하는 방법은 없을까요 ?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
31강 대출기능 개발에서 계속 유저 정보 가져오는곳에서 null이 나오는 이유가 뭘까요..
분명 MySql에 보면 user 테이블에 잘 저장되어 있고 북도 잘 저장되어있는데 왜 계속 null 뜰까요 ㅠㅠ java.lang.IllegalArgumentException: null at java.base/java.util.Optional.orElseThrow(Optional.java:408) ~[na:na] at com.group.libraryapp.service.book.BookService.loanBook(BookService.java:43) ~[main/:na] at com.group.libraryapp.service.book.BookService$$FastClassBySpringCGLIB$$9fdbff4c.invoke(<generated>) ~[main/:na] at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.24.jar:5.3.24] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) ~[spring-aop-5.3.24.jar:5.3.24] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.24.jar:5.3.24] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) ~[spring-aop-5.3.24.jar:5.3.24] at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) ~[spring-tx-5.3.24.jar:5.3.24] at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) ~[spring-tx-5.3.24.jar:5.3.24] at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-5.3.24.jar:5.3.24] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.24.jar:5.3.24] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) ~[spring-aop-5.3.24.jar:5.3.24] at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) ~[spring-aop-5.3.24.jar:5.3.24] at com.group.libraryapp.service.book.BookService$$EnhancerBySpringCGLIB$$41338896.loanBook(<generated>) ~[main/:na] at com.group.libraryapp.controller.book.BookController.loanBook(BookController.java:27) ~[main/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.24.jar:5.3.24] at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.24.jar:5.3.24] at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.24.jar:5.3.24] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.24.jar:5.3.24] at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.24.jar:5.3.24] at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.24.jar:5.3.24] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1071) ~[spring-webmvc-5.3.24.jar:5.3.24] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:964) ~[spring-webmvc-5.3.24.jar:5.3.24] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.24.jar:5.3.24] at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.24.jar:5.3.24] at javax.servlet.http.HttpServlet.service(HttpServlet.java:696) ~[tomcat-embed-core-9.0.69.jar:4.0.FR] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.24.jar:5.3.24] at javax.servlet.http.HttpServlet.service(HttpServlet.java:779) ~[tomcat-embed-core-9.0.69.jar:4.0.FR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.69.jar:9.0.69] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.24.jar:5.3.24] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.24.jar:5.3.24] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.24.jar:5.3.24] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.24.jar:5.3.24] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.24.jar:5.3.24] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.24.jar:5.3.24] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:177) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:891) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1784) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.69.jar:9.0.69] at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
양방향 매핑시 서로 set, add로 추가해줘야한다고하는데 연관관계 주인 하나만 하면 왜 값이 안뜨는걸까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]10:21member.setUsername("member1")member.setTeam(team);em.persist(member)이렇게 하고em.find(Team.class,team.getId())를 하게 되면 어차피 1차캐시갔다가 없으면 db가서 데이터를 받아오는데team에 members도 변화가 되는게 아닌가요?team도 매핑이 된 상태이고 값이 변화가 된게 아닌가요? em.flush();를 하면 또 db에서 받아와지는거 아닌가요..열심히 들었다고 생각했는데 갑자기 어지럽고 해깔리네요..
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
orphanRemoval에서 발생하는 쿼리 관련하여 질문드립니다.
안녕하세요.OneToMany 관계에서 orphanRemoval = true 옵션으로 데이터 제거 관련하여 질문드립니다. MemberService.removeAddress() 로직에서 address를 제거하면 select address -> select member -> select address -> delete 순으로 쿼리가 발생합니다. select address 쿼리가 2번 발생하는데, 일반적으로 쿼리 2번을 발생시키면서 고아 객체 제거를 진행하는 걸까요? 아니면 다른 방식의 remove 과정이나 또는 select address 쿼리를 1번으로 줄일 수 있는 방법이 있다면 알려주실 수 있을까요? 감사합니다. @RequiredArgsConstructor @Slf4j @Service public class MemberService { private final AddressRepository addressRepository; @Transaction public void removeAddress(Long addressId) { Address address = addressRepository.findById(addressId) .orElseThrow(() -> new Exception()); Member member = address.getMember(); member.getAddresses().remove(address); } } @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "member_id") private Long id; @OneToMany(mappedBy = "member", cascade = CascadeType.PERSIST, orphanRemoval = true) private final List<Address> addresses = new ArrayList<>(); // .. 중략 } @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity public class Address { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "address_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; // .. 중략 }
-
미해결실전! Querydsl
하나의 앤티티에 일대다 매핑을 2개 이상 일 때 한꺼번에 조회하면 데이터가 뻥튀기 됩니다.
안녕하세요.제가 겪고 있는 문제에 관해서 질문드리고 싶습니다.A 라는 앤티티가 B 와 C 를 패치 조인 전략을 사용해서 일대다 양방향을 하고 있는 상황입니다.query .selectFrom(A) .leftJoin(A.B, B).fetchJoin() .leftJoin(A.C, C).fetchJoin() .where(A.id.eq(AId)) .fetchOne()위와 같이 B 와 C 를 모두 패치 조인해서 한꺼번에 조회하게 되면 B 의 데이터가 C 의 개수 만큼 뻥튀기 되는 상황이 발생합니다.이를 어떻게 해결할 수 있는지 궁금합니다.저는 각각의 앤티티를 따로 따로 조회해서 A 에 할당해준다는 방법을 떠올렸는데 이렇게 하면 A 에 setter method 를 만들어야 해서 좋은 패턴이 아니라는 생각이 들었습니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
jpa find(.class, primaryKey: ) 부분 궁금합니다.
안녕하세요!세팅 그대로 따라했는데 find인자값안에 파란색으로 동그라미 친것처럼 primaryKey가 자동완성이 안됩니다.. 아무리 찾아도 문제를 못 찾겠는데 혹시 짚이시는 부분이 있으실까요!?ㅠㅠ
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
fetch_size 크기만큼 null을 다 채워서 보내는데 이유를 모르겠습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요. default_batch_fetch_size: 100 옵션을 주었을 때in 절에 2개의 값만 넣어도 되는 경우에도 size의 크기를 굳이 맞춰서 보내는 문제가 있습니다.예를들어 2개의 id 값만 보내도 된다면 아래와 같이 (1,2,null...) 으로 꼭 100개를 모두 맞춰서 보내게 됩니다.select oi1_0.order_id,oi1_0.order_item_id,oi1_0.count,oi1_0.item_id,oi1_0.order_price from order_item oi1_0 where oi1_0.order_id in (1,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);구글에 검색해도 왜 이런 증상이 발생하는지 찾아지지가 않아 문의 드립니다.bulid.gradle 설정은 다음과 같습니다.plugins { id 'java' id 'war' id 'org.springframework.boot' version '3.2.4' id 'io.spring.dependency-management' version '1.1.4'}group = 'jpabook'version = '0.0.1-SNAPSHOT'java { sourceCompatibility = '17'}configurations { compileOnly { extendsFrom annotationProcessor }}repositories { mavenCentral()}dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-devtools' implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'com.fasterxml.jackson.datatype:jackson-datatype-hibernate5-jakarta' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' testImplementation 'org.springframework.boot:spring-boot-starter-test'}tasks.named('test') { useJUnitPlatform()}