묻고 답해요
163만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결코드로 배우는 React 19 with 스프링부트 API서버
목록처리(2) 부분 페이징 처리 관련 오류발생하여 질문드립니다.
페이지처리하는 부분 오류 발생하여 질문 드립니다. import React, { useEffect, useState } from "react"; import { getList } from "../../api/todoApi"; import useCustomMove from "../../hooks/useCustomMove"; import PageComponent from "../common/PageComponent"; const initState = { dtoList: [], pageNumList: [], pageRequestDto: null, prev: false, next: false, totalCount: 0, prevPage: 0, nextPage: 0, totalPage: 0, current: 0, }; const ListComponent = () => { const { moveToList, page, size } = useCustomMove(); const [serverData, setServerData] = useState(initState); useEffect(() => { getList({ page, size }).then((data) => { setServerData(data); }); }, [page, size]); return ( <div className="border-2 border-blue-100 mt-10 mr-2 ml-2"> <div className="flex flex-wrap mx-quto justify-center p-6"> {serverData.dtoList.map((todo) => ( <div key={todo.tno} className="w-full min-w-[400px] p-2 m-2 rounded shadow-md" > <div className="flex"> <div className="font-extrabold text-2xl p-2 w-1/12"> {todo.tno} </div> <div className="text-1xl m-1 p-2 w-8/12 font-extrabold"> {todo.title} </div> <div className="text-1xl m-1 p-2 w-2/10 font-medium"> {todo.dueDate} </div> </div> </div> ))} </div> <PageComponent serverData={serverData} movePage={moveToList} ></PageComponent> </div> ); }; export default ListComponent;listComponent에서 initState 생성하고, setServerData 해서 pageComponent로 전달. const PageComponent = ({ serverData, movePage }) => { console.log("data.prev: " + serverData.prev); return ( <div className="m-6 flex justify-center"> {serverData.prev ? ( <div className="m-2 p-2 w-16 text-center font-bold text-blue-400 " onClick={() => movePage({ page: serverData.prevPage })} > Prev{" "} </div> ) : ( <></> )} {serverData.pageNumList.map((pageNum) => ( <div key={pageNum} className={`m-2 p-2 w-12 text-center rounded shadow-md text-white ${ serverData.current === pageNum ? "bg-gray-500" : "bg-blue-400" }`} onClick={() => movePage({ page: pageNum })} > {pageNum} </div> ))} {serverData.next ? ( <div className="m-2 p-2 w-16 text-center font-bold text-blue-400" onClick={() => movePage({ page: serverData.nextPage })} > Next </div> ) : ( <></> )} </div> ); }; export default PageComponent;pageComponent에서 serverData받아서 데이터 사용하는 부분.이러한 오류 발생합니다...아무리 봐도 어느 부분이 문제 인지 모르겠어요.serverData.prev 로그 찍어봐도 false라고 남는데.. 그리고 또 렌더링을 해서 undefined상태인건지... 어느 부분이 문제일가요 ㅠㅠ? prev를 부분을 지우면 pageNumList 에서 문제가 발생하여 prev만의 문제가 아니라 serverData자체를 받아오지 못하는거같습니다..
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
Maven resources compiler 에러가 뜨면서 빌드가 안되네요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]JpaMain.java 실행시 이런 에러가 계속 발생합니다. Maven resources compiler: Maven project configuration required for module 'hello-jpa' isn't available. Compilation of Maven projects is supported only if external build is started from an IDE. persistence.xml은 다음과 같고 <?xml version="1.0" encoding="UTF-8"?> <persistence version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"> <persistence-unit name="hello"> <properties> <!-- 필수 속성 --> <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/> <property name="javax.persistence.jdbc.user" value="sa"/> <property name="javax.persistence.jdbc.password" value=""/> <property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/test"/> <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/> <!-- 옵션 --> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.format_sql" value="true"/> <property name="hibernate.use_sql_comments" value="true"/> <!--<property name="hibernate.hbm2ddl.auto" value="create" />--> </properties> </persistence-unit> </persistence>pom.xml은 다음과 같이 했습니다. <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>11</source> <target>11</target> </configuration> </plugin> </plugins> </build> <groupId>org.example</groupId> <artifactId>hello-jpa</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!-- JPA 하이버네이트 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>5.3.10.Final</version> </dependency> <!-- H2 데이터베이스 --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.4.200</version> </dependency> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.0</version> </dependency> </dependencies> </project>진짜 3시간 넘게 하고 있는데 뭐가 문제인지 모르겠네요 pom.xml에 빌드가 등록 안 되어 있다길래 챗지피티한테 물어봐서 따로 추가도 해봤는데 저기서부터 막혀버리니 답이 없네요 진짜 ㅋㅋㅋ 무슨 정확한 에러 사유도 안 뜨고Maven resources compiler: Maven project configuration required for module 'hello-jpa' isn't available. Compilation of Maven projects is supported only if external build is started from an IDE.이런 문장만 계속 보여주니까 답답해 미쳐버리겠습니다.. 데이터베이스는 강의 환경하고 맞추려고 1.4.200으로도 해보고 최신버전으로도 해봤고java 버전도 17, 11 둘 다 해봤는데 둘 다 똑같은 에러가 발생해서 미쳐버리겠습니다 아 참고로 강의에서 제공해주신 최신 버전 코드도 다운 받아서 open으로 열어봤는데 다 똑같은 에러가 발생합니다. 애초에 프로젝트 만들 때부터 잘못 만들어진건지 계속 똑같이 저 상태인데 왜 그러는걸까요..
-
미해결실전! 스프링 데이터 JPA
메소드 이름으로 쿼리 생성에 대한 질문
스프링 데이터 JPA가 제공하는 쿼리 메소드 기능 조회: find…By ,read…By ,query…By get…By예:) findHelloBy 처럼 ...에 식별하기 위한 내용(설명)이 들어가도 된다이 부분에 대한 의문입니다 spring공식문서를 찾아보고 chatgpt 에 질문도 해본 결과 findBy는 항상 붙어있어야 하고 사이에 단어를 넣어 작성하면 안된다는게 제가 얻은 답변인데 강의 자료에는 가능하다고 나와 있습니다어떤게 정확히 맞는건지 혼란스럽네요시간이 흘러서 문법 규칙이 바뀌어서 그런건지이와 관련해 답변 부탁드리겠습니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
updateItem 변경감지 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Book에는 저 세 가지 필드 말고도 다른 필드도 존재하는데현재 merge가 아니라 변경 감지로 값을 수정하는 것이기 때문에@Transactional public void updateItem(Long itemId, String name, int price, int stockQuantity) { Item findItem = itemRepository.findOne(itemId); findItem.setPrice(price); findItem.setName(name); findItem.setStockQuantity(stockQuantity); }다음과 같은 형태로 사용해도 다른 필드는 null 값으로 바뀌지 않는 거 맞을까요?
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
[사이드 프로젝트] 하이버네이트 No session 에러 질문 드립니다.(lazyinitializationexception)
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]현재 회원 엔티티 시점 Member(회원) 1 : N Pet(반려견) 일대다 관계인 상태입니다.-Member(회원) 엔티티 -Pet(반려견) 엔티티 연관관계 설정해 둔 모습입니다. -이게 문제가 되고 있는 서비스 로직입니다. MemberRepository에서 회원의 role(역할)을 찾은 후,role(역할)이 CUSTOMER(고객)인 경우 해당 회원의 정보와 갖고 있는 List<>형태의 pet을 한 번에 갖고 와서 DTO로 변환 해서 반환하려고 합니다. 실제로 어떻게 리포지토리에서 조회하고 있는지 보여드리겠습니다. -role(역할)이 CUSTOMER(고객)인 경우 findByCustomerId()로 위와 같이 회원과 pet을 한 번에 조회하고 있습니다. (실제 쿼리문이 나가는 것을 봤을 때도 fetch join 쿼리로 나가서 pet이 프록시가 아닌 실 객체 데이터로 조회되는 것을 확인했고, 디버깅도 해봤는데 pet 컬렉션에 데이터가 있는 것도 확인했습니다.)다음으로 member 엔티티를 DTO로 어떻게 반환하는 지 보여드리겠습니다. -Pet(반려견)을 PetResponse라는 DTO로 다시 바꿔서 반환 시켜주려고 하고 있는 상황이고 -이게 PetResponse 입니다. 여기까지가 현재 저의 문제가 되고 있는 코드와 동작 방식입니다.현재 뜨고 있는 오류는 lazyinitializationexception 에러가 발생하고 있습니다. 알아보니 트랜잭션 주기 안에서 컬렉션을 조회하는 것이 아니라, 하이버네이트 세션이 끝난 후 영속성 컨텍스트가 사라진 상태에서 엔티티가 갖고 있는 컬렉션(pets)을 조회하게 돼서, 트랜잭션 내에 존재한 영속성 컨텍스트 내의 pets를 조회하는 것이 아닌 새로운 영속성 컨텍스트에서 조회를 하게 돼버려서 실 객체 데이터가 조회되는 것이 아닌 프록시 객체가 조회가 되고 있다는 내용으로 이해했습니다. 그래서 제가 여태 해본 방법으로는,서비스 레벨의 findById(long id) 메서드에서 member 정보만 따로 조회하고 pet만을 따로 각각 조회한 후 dto로 반환 해보기 (예: memberRepository.findByid()로 회원만 조회, petRepository.findbyCustomerId()로 pet만 따로 조회 후, new MemberResponse.GetCustomer()로 반환 -> 안됨.(X) 현재 메서드 레벨 위에 작성되어 있는 트랜잭션 어노테이션이 readOnly = true로 읽기 전용이면 pets를 초기화 할 수도 없을 수 있다길래 readOnly = true 옵션도 빼 보기 -> 안됨.(X)yml 설정 파일에 spring: jpa: open-in-view: true 옵션 설정 해보기 -> 안됨.(X)Member(회원) 엔티티에 읽기 전용으로 있는 List<> pets를 지연 로딩이 아닌 즉시로딩으로 바꾸기. -> 이 경우에만 됨.(O)Hibernate.initialize(member.getPets()); 을 사용해서 컬렉션 강제 초기화 하기 -> 안됨.(X) 현재 이렇게 까지 시도해 봤고 pets를 즉시 로딩으로 바꾸는 경우 말고는 아예 되지 않는 상황입니다. 보통 저와 같은 경우 간단하게 해결되는 문제던데 스택오버플로우와 구글의 힘을 빌려 검색해서 시도해 본 결과 해결되지 않았습니다.. 제가 어떤 실수를 하고 있는지, 뭐가 문제인지 봐주시면 감사하겠습니다.!!추가 설명이 필요하거나 깃허브 주소라도 필요하면 댓글로 남기겠습니다!
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
연관관계 매핑의 의미가
연관관계 매핑: 객체의 참조와 테이블의 외래키를 매핑하고, 객체간의 관계(다대일관계)와 테이블간의 관계(외래키-기본키관계)를 매핑하는것.객체간의 관계에서는 Member객체는 team필드를 통해 Team객체를 참조한다. 테이블간의 관계에서는 MEMBER테이블의 외래키(TEAM_ID)를 통해 TEAM테이블을 참조한다. 이렇게 객체와 테이블은 구조적으로 다르기 떄문에 객체간의 관계와 테이블간의 관계를 동일하게 해주기 위해 연관관계 매핑이 필요하다. team필드를 통해 Team객체를 참조하던것을 외래키(TEAM_ID)를 통해 기본키(id)를 참조하도록 변경한것이라고 생각하면된다. 이렇게 이해하고 정리해봤는데 이게 맞을까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
연관관계 매핑의 의미
안녕하세요.연관관계 매핑의 의미가 객체의 참조와 테이블의 외래키를 매핑하는것을 의미하는것인가요? 아니면 객체간의 관계와 테이블간의 관계를 매핑하는것을 의미하는것인가요?비슷한 의미이지만 헷갈려서 질문드립니다.
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
JPQL 기본 함수에서 substring
[질문 내용]member.setUsername("member1); 한 회원의 이름을 셋팅하고 substring으로 쿼리를 작성하였을 때 String query = "select substring(m.username, 1, 3) from Member m"; substring(m.username, 1, 3) 에서 몇번째 문자에서 자를지 넣는 숫자에 1이나 0을 넣어도 같은 "mem" 이 출력 되는데"member1"은 공백이 없이 setter가 되었는데 왜 0, 1의 출력값이 동일하게 나오는건가요? 애초에 substring의 숫자는 0 부터 시작하는거 아닌가요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
컬럼명
db에서의 컬럼명을 warehousingDate로 정의하고 자바에서 warehousingDate로 필드를 선언하여 테스트했을 때 매핑되지 않아 테스트에 실패합니다.db는 스네이크 케이스를 사용해서 jpa가 warehousingDate를 warehousing_date로 매핑시키려고 해서 그런 것 같은데 @Column(name = "warehousingDate")로 해도 안 되고 db의 컬럼명을 warehousing_date로 수정해야 정상 작동하는데 db에서 warehousingDate를 그대로 사용하고 정상적으로 매핑이 되게 하려면 어떻게 해야 하나요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
질문드립니다..
1. Member엔티티의 필드와 MEMBER 테이블의 외래키 컬럼을 매핑하고, Member테이블의 외래키(TEAM_ID)를 Team테이블의 기본키와 매핑한다.2. member.getTeam()을 할때 MEMBER 테이블의 외래키(TEAM_ID)를 통해 TEAM테이블의 기본키를 참조하여 Team 데이터를 가지고 올 수 있다.3. Member테이블의 외래키와 Team테이블의 기본키를 매핑해서 외래키-기본키 관계를 설정한다.이 3가지가 각각 @JoinColumn때문인지, @ManyToOne때문인지 구분이 안되서 질문드립니다.. 각각 어느 어노테이션에 의해 동작되는것인가요??
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
Persist() 호출 시 스냅샷 생성 여부가 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]Member member = new Member(1L, "member"); em.persist(member); member.setName("Test"); tx.commit();위 코드를 실행하면 아래와 같이 SQL 쿼리문이 로그에 찍히는데요Hibernate: /* insert for hellojpa.Member */ insert into Member (name, id) values (?, ?) Hibernate: /* update for hellojpa.Member */ update Member set name=? where id=?persist()를 할 때 member 객체를 영속성 컨텍스트에 등록하고, 해당 상태에서는 신규 엔티티이므로 setName()으로 이름을 바꾸더라도 새로운 값이고, DB와 동기화되지 않았기에 스냅샷도 없을 것이라 생각했습니다.저의 [다른 질문](https://www.inflearn.com/community/questions/1484678)에서도 강사님께서 persist 시에는 새로운 데이터이기 때문에 스냅샷 생성의 실익이 없다고 말씀을 해주셨기에, 위 코드에서 INSERT 쿼리문 1개만 발생할 줄 알았는데, 실행 결과 UPDATE 쿼리문도 함께 발생한 것을 확인했습니다.persist를 수행한 이후 setName을 수행할 때, 스냅샷이 생성되지 않은 상태, 스냅샷이 없는 상태에서 어떻게 변경을 감지하여 UPDATE 쿼리문을 작성한 것인지 궁금합니다.처음에는 PK 생성 전략을 @GeneratedValue(strategy = GenerationType.IDENTITY) 로 해서 INSERT문이 먼저 생성되는 것이 원인인줄 알았지만, SEQUENCE 전략으로 바꿔도 UPDATE 쿼리문이 발생하는 것을 보고 제가 잘못 짚은 것 같았습니다.이미 [또 다른 질문](https://www.inflearn.com/community/questions/1494485)에서도 비슷한 질문을 한 번 더 남겼는데, 인프런 AI 인턴의 답변에서는 persist() 호출 시에 스냅샷이 생성이 된다는 답변을 받아 헷갈려서 한 번 더 질문 남겨봅니다.Entity Manager를 통해 persist() 호출 시에 스냅샷도 생성이 되는 것일까요?생성이 되지 않는다면, persist 이후에 호출한 setName()에 대해서 UPDATE문이 발생했는데, 여기서 변경 감지는 어떻게 이뤄졌나요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Kafka Source Connect 사용
강사님 너무 좋은 강의 감사드립니다. JDBC Source Connector 예시를 잘 보았습니다. 해당 소스 커넥터의 경우 DB를 주기적으로 폴링해서 변경사항을 감지해서 DB 부담이 큰 것으로 알고 있는데요. (CDC source connector에 비해)혹시 해당 방식의 커넥터는 현업에서도 메이저하게 사용하는 방식인지 아니면 단순 예시인지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
로그에 values(?, ?, ?, ?, ?) 궁금증
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의에서는 쿼리 날라갈 때 로그를 보면 폼에 입력한 데이터가 로그에 다 뜨는데제 스프링 로그를 보면 insert into member (city, street, zipcode, name, member_id) values (?, ?, ?, ?, ?)이 로그밖에 안 뜨는데 최신버전 스프링에서는 보안상 로그에서 필터링을 해주는 건가요?아니면 따로 영한님께서 설정을 해주신건가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
OrderSearch에서 사용된 JPQL 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]OrderRepository 안에 JPQL로 다음과 같이 쿼리를 날리고 있는데em.createQuery("select o from Order o join o.member m", Order.class)여기서 사실 모든 주문이 회원하고 같이 매핑되어 있으면 join 하위에 문장은 필요 없는 문장 아닌가여?? 그냥 단순히 select o from Order o만 해도 될 것 같은데 왜 저렇게 한걸까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
from 절의 서브 쿼리에서 여러 값 조회
[질문 내용]from 절의 서브 쿼리를 작성하였을 때 조회로 여러 값이 나오게 테스트를 한번 만들어 보았는데요.// 페이징 쿼리 String query = "select new jpqljpa.MemberDTO(mm.mUser, mm.mAge) from (select m.username mUser, m.age mAge from Member m) mm"; List<Member> result = em.createQuery(query, Member.class).getResultList(); System.out.println("result = " + result.get(0));이렇게 하였을 때, 에러없이 나오긴합니다. 어떤 메커니즘으로 해당 쿼리가 문제없이 나오는지 구체적으로 알려주실수 있나요? 그리고 추가 질문으로 출력된 결과가result = jpqljpa.MemberDTO@4def42c3객체 메모리값으로 나오게되었는데 이름, 나이의 값을 출력하고싶다면 어떻게 코드를 쳐야 할까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
연관관계 없는 엔티티 외부 조인 관련돼서 질문
[질문 내용]조인 강의 영상에서 Member 엔티티와 Team 엔티티를 member.changeTeam(team) 메소드를 통해 연관관계를 매핑해서 Member와 Team은 연관관계가 있는 것이고, 코드 상에서도 이미 연관관계 매핑된 상태에서 왜 연관관계 없는 엔티티 외부 조인 쿼리를 보여주시는 것인지 잘 이해가 안됩니다.
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
Team t, m.team t
[질문 내용]"조인" 강의 영상 13분 51초에 김영한 강사님께서 select m from Member m left join Team t on m.username = t.name 쿼리를 치셨는데, 여기서 m.team t를 하지 않고, 왜 Team t 로 하셨는지 구체적으로 알려주실 수 있나요?
-
미해결실전! 스프링 데이터 JPA
스프링 데이터 JPA save()할때 OneToMany 엔티티의 필드가 null값이 저장되요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]특정 리포지토리에서 save()할때만 연관관계에 있는 엔티티의 필드가 null로 저장됩니다. 대체 어디가 문제일까요? cascade도 persist로 맞췄고 save 바로 직전에 로그를 띄웠을때도 정상적으로 값이 들어가있었는데 save()할때만 값이 null값으로 insert되네요
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
(재질문)토이프로젝트에서 spring data jpa 기반으로 페이징 처리 중 궁금한 점 있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 아니오3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]저번에도 같은 질문을 올렸다가 질문이 두서가 없다보니 여쭤보려고 한 것을 잘못 물어본거같아서 다시 질문드립니다. Spring Data JPA를 바탕으로 토이프로젝트를 개발하고있고 Pageable 인터페이스를 활용하고 있습니다. 프로젝트에서 Item(품목)의 하위 개념으로 Product(제품)을 가지고 있습니다.(1:N - 품목 하나에 대해 여러개의 제품을 등록 할 수 있음)예를 들어 핸드폰이라는 Item(품목) 정보를 등록하고, 그 품목에 대한 Product(제품) ( 이를테면 아이폰10, 갤럭시S25, 샤오미)의 정보들을 등록합니다.이때 특정 품목(itemId)을 클릭하면 해당 품목에 대한 정보와 내가 등록한 product 리스트가 띄어지도록 하는 api 기능을 구현하려 했습니다. 처음에는 요청이 item컨트롤러로 디스패치하고, product와 itemId를 기준으로 패치조인하여 데이터를 받아오는 식으로 구현을 했는데.. product리스트를 불러오는 과정에서 페이징을 하고자 기존의 로직을 수정하니, 메인i 테이블인 item을 기준으로 페이징이 되는 문제가 발생했습니다. // page처리 시 문제가 발생하는 respository method@Query(value = "SELECT DISTINCT i FROM Item i LEFT JOIN FETCH i.productList WHERE i.id = :itemId",countQuery = "SELECT COUNT(p) FROM Product p WHERE p.item.id = :itemId")Page<Item> findWithProductsByItemId(@Param("itemId") long itemId, Pageable pageable); 그래서 제가 생각한 두가지 안이 있는데 이중에 어떤 것으로 개발해야할지 판단이 잘 서지않아 질문드립니다. 1) 응용계층에서 item에 대한 정보를 불러오는 item서비스 호출 + 위 item에 해당되는 product 리스트 정보들을 paging 하여 불러오는 페이징하여 불러오는 product서비스 호출 2) product를 메인으로 item과 n:1 패치조인하는 메소드를 productRepository에서 생성. 1번 방법이 맞는 것 같지만,, paging으로 데이터를 불러올 때마다 item쿼리를 한번씩 날려야하는게 비효율적인거 같기도하고,, 2번으로 하자니... 구현하고자 하는 기능은 item을 메인으로 product 목록을 불러오는 것인데,, 실제 동작은 Product가 메인으로(Product컨트롤러로 디스패치) 처리가 되다보니 이렇게 해도 될까 하는 의문이 들었습니다.이런 상황에서는 어떤 식으로 구현을 하는게 좋을지요. 고견을 여쭙니다 ㅠㅠ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
NotEnoughStockException 커스텀 Exception을 만든 이유가 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 [질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의에서 NotEnoughStockException 을 새로 만드셨는데, IllegalArgumentException을 사용하는 것은 어색한가요? 처음엔 도메인에서 exception 처리 때문에 별도로 생성한 것이겠지하고, 넘어갔는데 주문 취소의 배송완료된 상태에서는 IllegalStateException 을 사용하셔서, 어떻게 구분하여 사용하는 것이 좋을지 궁금합니다.