inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

team.members.size 쿼리 사용 시 디비 데이터가 삭제되는 현상

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 강의에 나온 대로 t.members.size를 가져오는 쿼리를 작성 후 실행해봤습니다. 하지만 결과가 나오지 않고, h2디비에 들어가서 값을 확인해보니 값이 모두 지워져있습니다. jpql쿼리를 작성하고 결과를 가져오는 코드를 주석으로 처리하고 돌려보면, 값이 제대로 들어가있는 것을 확인할 수 있었습니다. 단순히 쿼리를 날리면서 디비에 있는 값이 모두 삭제되는 현상은 아닌 것 같은 게, team.teamname처럼 team의 상태필드를 셀렉트해오는 쿼리문을 날리면, 정상작동되며 디비의 값도 사라지지 않습니다. 대체 어떤 이유 때문에 컬렉션 값 연관 필드를 타고 들어가면 디비의 값이 사라지는 건가요? select team.teamName from Team t 하는 경우 package jpql; import jakarta.persistence.EntityManager; import jakarta.persistence.EntityManagerFactory; import jakarta.persistence.EntityTransaction; import jakarta.persistence.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(); try{ Team team = new Team(); team.setTeamName("team1"); em.persist(team); Member member = new Member(); member.setUserName("raewoo"); member.setAge(10); member.changeTeam(team); em.persist(member); em.flush(); em.clear(); System.out.println("============="); String sql = "select t.teamName from Team t"; String result = em.createQuery(sql, String.class) .getSingleResult(); System.out.println(result); tx.commit(); }catch (Exception e) { tx.rollback(); }finally { em.close(); } emf.close(); } } select t.members.size from Team t하는 경우 package jpql; import jakarta.persistence.EntityManager; import jakarta.persistence.EntityManagerFactory; import jakarta.persistence.EntityTransaction; import jakarta.persistence.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(); try{ Team team = new Team(); team.setTeamName("team1"); em.persist(team); Member member = new Member(); member.setUserName("raewoo"); member.setAge(10); member.changeTeam(team); em.persist(member); em.flush(); em.clear(); System.out.println("============="); String sql = "select t.members.size from Team t"; Integer result = em.createQuery(sql, Integer.class) .getSingleResult(); System.out.println(result); tx.commit(); }catch (Exception e) { tx.rollback(); }finally { em.close(); } emf.close(); } }

  • java
  • jpa
raewoo0908 댓글 2 좋아요 0 조회수 292

querydsl orderspecifier 조건 분기

해결됨

실전! Querydsl

private List<OrderSpecifier> getOrderSpecifier() { List<OrderSpecifier> orderSpecifiers = new ArrayList<>(); //승인 안된 관리자 우선 조회 orderSpecifiers.add(new OrderSpecifier<>(Order.ASC, admin.isAuthorized)); orderSpecifiers.add(new OrderSpecifier( new CaseBuilder() .when(admin.isAuthorized.eq("FALSE")).then(admin.createdAt.asc()) .when(admin.isAuthorized.eq("TRUE")).then(admin.createdAt.desc()) )); return orderSpecifiers; } 아래와 같은 order 순서로 정렬하려 하는데 2,3 조건을 나누는 부분이 잘 되지 않아 질문 남깁니다. CaseBuilder 대신 다른 방법이 있나요? 승인 받지 못한 관리자(isAuthorized = 'FALSE') 먼저 조회 isAuthorized = 'FALSE' 인 경우에는 createdAt asc isAuthorized = 'TRUE' 인 경우에는 createdAt desc

  • java
  • jpa
olive3three 댓글 3 좋아요 0 조회수 896

컬렉션 페치 조인 관련해서 질문 드립니다

미해결

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 컬렉션 페치 조인을 하면 페이징시 위험하기 때문에 지양해야 한다고 하셨는데 그러면 페이징을 하지 않을 때는 컬렉션도 페치 조인을 해서 성능을 올려도 괜찮을까요? 아니면 컬렉션은 항상 지연 로딩 하는 것이 안전한가요?

  • java
  • jpa
shk 댓글 2 좋아요 0 조회수 320

객체 생성 시 검증 로직에 대해 질문드립니다.

해결됨

Practical Testing: 실용적인 테스트 가이드

객체를 생성할 때 입력 받는 데이터를 전부 검증하고 객체 필드를 업데이트할 때도 그 데이터가 유효한지 검증하는 방식을 사용한다면, 다른 레이어에서 검증된 데이터를 넣어 객체를 생성할 때도 해당 데이터를 객체 내부에서도 검증하게 되어서 중복으로 체크하는데, 이런 방식이 괜찮을지 아니면 객체에서 데이터 검증을 적당히 처리하고 레이어 별로 검증 책임을 중복되지 않게 처리하는 방식이 괜찮을지 질문드립니다!

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
김규현 댓글 1 좋아요 0 조회수 227

엔티티에는 validatin을 안하는 게 좋나요?

미해결

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

@Column(nullable = false) 이런 것들을 엔티티 클래스에 하는 것 대신에 dto나 도메인 레이어에서 검증을 하는 게 좋다는 말을 들었는데 엔티티내부에서 검증을 하는 것을 안해도 되는 건가요?

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
Jung Cheol 댓글 1 좋아요 0 조회수 123

Bulk 저장 질문

해결됨

실전! Querydsl

[질문 내용] em.perist()는 bulk를 사용하는 방법이 있나요?

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

Order 단위 테스트

미해결

Practical Testing: 실용적인 테스트 가이드

학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요! 먼저 유사한 질문이 있었는지 검색해 보세요. 서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요 박우빈님, 좋은 강의 잘 듣고 있습니다. 강의 영상 속에서 Order 단위 테스트 중 orderProducts에 관한 단위 테스트는 실시하지 않아 혼자 직접 진행했습니다. 가장 먼저 다음과 같이 단위 테스트를 작성해보았습니다. @DisplayName("주문 생성 시 주문에 해당 상품이 포함된다.") @Test void orderProduct() { // given LocalDateTime registeredDateTime = LocalDateTime.now(); List<Product> products = List.of( createProduct("001", 1000), createProduct("002", 2000) ); // when Order order = Order.create(products, registeredDateTime); // then assertThat(order.getOrderProducts()).hasSize(2) .extracting("Product") .containsExactlyInAnyOrder( createProduct("001", 1000), createProduct("002", 2000) ); } 하지만 위 사진처럼 Product 객체가 다르다고 판단되어 단위 테스트가 실패합니다.(createProdcut()를 이용한 새 객체 생성이 원인이라고 생각합니다.) 그래서 다음과 같이 createProduct()를 빼서 테스트를 진행하니 성공했습니다. @DisplayName("주문 생성 시 주문에 해당 상품이 포함된다.") @Test void orderProduct() { // given LocalDateTime registeredDateTime = LocalDateTime.now(); Product product1 = createProduct("001", 1000); Product product2 = createProduct("002", 2000); List<Product> products = List.of( product1, product2 ); // when Order order = Order.create(products, registeredDateTime); // then assertThat(order.getOrderProducts()).hasSize(2) .extracting("Product") .containsExactlyInAnyOrder( product1, product2 ); } 결론적으로 단위 테스트는 성공했지만 몇 가지 궁금증이 있습니다. orderProducts의 대한 단위 테스트(위 코드)가 적합한지 orderProducts는 Order(this), Product를 갖고 있는데 Order(this)도 함께 검증하는게 맞는지 긴 글 읽어주셔서 감사합니다.

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
권하루 댓글 1 좋아요 0 조회수 305

QHello 빌드관련 질문드립니다

미해결

실전! Querydsl

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 3.X 버전 설명처럼 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' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' // QueryDSL 추가 implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta" annotationProcessor 'jakarta.annotation:jakarta.annotation-api' annotationProcessor 'jakarta.persistence:jakarta.persistence-api' } tasks.named('test') { useJUnitPlatform() } clean { delete file('src/main/generated') } 위와 같이 코드를 넣어 빌드를 하면 저는 build 안에만 QHello가 생성되고 다른 분들과 같이 src/main에 generated는 전혀 생성되지 않습니다. 강의에서는 QHello를 임포트 할 때, src/main 쪽의 QHello를 사용하는것 같은데, 저는 build 경로에서 직접 사용해야 되는 문제가 있습니다. 실제 사용하려면 src/main를 이용해야 될 것 같은데 어떻게 해야 src/main에 generated의 QHello를 생성할 수 있을지 문의드립니다.

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

소스가 전혀 실행이 안됨

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

강의 1편때의 소스로도 실행이 안되서, 다시 2편 소스로 수행하면 에러메시지가 잔뜩 나오는데 너무 시작부터 불성실하게 시작하는거 아님? 지금 소스 받아서 환경을 맞춰주고 강의를 시작해야지 대뜸시작하면 실행도 안되는 소스로 뭐 어떡하라고.

  • java
  • spring
  • spring-boot
  • jpa
오진희 댓글 1 좋아요 -11 조회수 359

@Transactional 했는데 롤백 문구가 안 떠요

미해결

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

다음과 같이 코드를 실행하면 강의 화면처럼 "Rolled back transaction for test"가 나와야 하는데 그렇지 않고 H2에서도 컬럼만 있는 빈 테이블입니다. 뭐가 문제일까요? package jpabook.jpashop; import com.fasterxml.jackson.databind.deser.std.StdKeyDeserializer; import org.assertj.core.api.Assertions; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.Rollback; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.transaction.annotation.Transactional; @RunWith(SpringRunner.class) @SpringBootTest public class MemberRepositoryTest { @Autowired MemberRepository memberRepository; @Test @Transactional public void testMember() throws Exception { //given Member member = new Member(); member.setUsername("memeberA"); //when Long saveId = memberRepository.save(member); Member findMember = memberRepository.find(saveId); //then Assertions.assertThat(findMember.getId()).isEqualTo(member.getId()); Assertions.assertThat(findMember.getUsername()).isEqualTo(member.getUsername()); } }

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
sichelmond 댓글 5 좋아요 0 조회수 339

쓰기 지연 저장소?

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 강의를 듣다보니 flush 과정에서 쓰기 저장 지연소에 SQL이 저장된다고 설명하셨는데 이것이 뭔지 알 수 있을까요?

  • java
  • jpa
주혁 댓글 1 좋아요 0 조회수 158

BookForm 객체에 toServiceDto() 메서드 사용 질문드립니다.

해결됨

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

안녕하세요! ItemServiceDTO ItemForm ItemController 위와 같이 ItemForm(BookForm) 클래스에 toServiceDTO()라는 빌더 메서드를 작성하였습니다. Controller에서 ItemForm의 빌더 메서드를 통해 ItemServiceDTO로 바로 변환해 Service단에 넘겨주었는데 위와 같이 구현해도 괜찮을까요? 만약 상관이 없다면 ItemForm에서 ItemServiceDTO를 의존하고 있는데 DTO끼리의 의존은 크게 신경 안써도 될까요? 좋은 강의 감사드립니다!!

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
심우민 댓글 1 좋아요 1 조회수 223

jpa jakarta가 오류나네요

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] javax로 여태 하다가 이번에 jpa하면서 막히길래 뭔가 했는데 패키지를 jakarta로 바꿔달라해서 바꿔주었는데 import부분에서 모든 클래스들이 jakarta로 설정을 하면 에러가 뜨게 되네요 모든 클래스에 대해 java부분을 jakarta로 바꾸기에는 jakarta가 없고 java가 있으며 그럼 이걸 어떻게 해야 하는걸까요?

  • java
  • jpa
  • jakarta
댓글 3 좋아요 0 조회수 939

jdk 설정 질문

해결됨

입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기

혹시 원래 jdk17이 깔려있었는데 sdk 버전 이걸로 하면안되고 선생님이 올려주신 자료 jdk를 설치해서 zulu-17로 설정을 해야할까요?

  • kotlin
  • mysql
  • docker
  • spring-boot
  • jpa
댓글 1 좋아요 0 조회수 173

window

해결됨

입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기

window 사용자는 Dbeaver, Doker 설치를 그냥 구글에 쳐서 다운만 받아두면 되는건가요? 자료에 있는 window 개발 환경 구성하기는 다 다운 했습니다.(인텔리제이, h2데이타베이스, jdk17)

  • kotlin
  • mysql
  • docker
  • spring-boot
  • jpa
댓글 1 좋아요 0 조회수 147

강의 자료가 안보이고 압출풀기가 안됩니다.

해결됨

입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기

커뮤니티에 글올라온거 보고 압축 풀려고하는데 압축풀기가 안된다고 합니다 폴더 이름을 바꿔도 계속 안됩니다. wer05003@naver.com 으로 보내주실수있나요?

  • kotlin
  • mysql
  • docker
  • spring-boot
  • jpa
댓글 1 좋아요 0 조회수 128

영속성 컨텍스트 업데이트

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 영속성 컨텍스트 내에서 엔티티와 스냅샷을 비교한다고 했는데 엔티티는 member.setName(" zzzzz")로 변경한 값인가요?

  • java
  • jpa
주혁 댓글 1 좋아요 0 조회수 212

섹션 4 회원 기능 테스트에서 yml 파일을 test에 추가하면

미해결

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

23:18 에서 run을 하면 connection url 이 jdbc:h2:mem:testdb로 나타나는 것이 아니라 jdbc:h2:mem:4ea5215f-2678-4770-ad7b-4696fcde71b2 이렇게 특정 숫자로 나타나는데... 뭐가 문젠가요? 그리고 test 파일에 붙여넣은 application.yml 파일도 main 폴더에 있는 yml파일처럼 초록색 잎사귀 모양으로 나타나는게 아니라 빨간색 y아이콘으로 나타나는데 이게 yml파일이 제대로 적용되지 않았다는건가요? 그래서 gpt를 참고해보니 src/test/resources 폴더가 Test Resources 로 설정되어 있는지 확인합니다. 그렇지 않으면 폴더를 선택하고 Mark as: Test Resources 로 설정합니다. 라고 해서 해보려 했더니 Source root 'C:\Users\jar05\OneDrive\바탕 화면\Github\JPA_study\jpashop\jpashop\src\test\resources' cannot be defined in module 'jpabook.jpashop' because it belongs to content of nested module 'jpabook.jpashop.test' 이런 에러가 발생합니다..

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

테스트하기 어려운 영역을 분리하는 과정

미해결

Practical Testing: 실용적인 테스트 가이드

학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요! 먼저 유사한 질문이 있었는지 검색해 보세요. 서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요 박우빈님, 강의 잘 듣고 있습니다 다름이 아니라 '테스트하기 어려운 영역을 분리하기' 세션 중 아래 코드와 같이 createOrder() 메서드를 오버로딩하여 테스트가 어려운 영역을 분리하여 테스트를 진행해주셨습니다. 여기서 실제로도 어려운 영역을 분리하여 테스트 하기 위해 실제 비즈니스 로직에 테스트를 위한 메서드를 오버로딩하여 테스트 하는지가 궁금증이 생겼습니다. 실무에선 해당 Test 클래스 내에서 메서드를 오버로딩 하여 사용하는 방식인가 싶은 생각도 들었습니다. 실무에선 어떤 식으로 오버로딩하여 사용하나요? public Order createOrder() { LocalDateTime currentDateTime = LocalDateTime.now(); LocalTime currentTime = currentDateTime.toLocalTime(); if(currentTime.isBefore(SHOP_OPEN_TIME) || currentTime.isAfter(SHOP_CLOSE_TIME)){ throw new IllegalArgumentException("주문 시간이 아닙니다. 관리자에 문의하세요"); } return new Order(currentDateTime, beverages); } public Order createOrder(LocalDateTime currentDateTime) { LocalTime currentTime = currentDateTime.toLocalTime(); if(currentTime.isBefore(SHOP_OPEN_TIME) || currentTime.isAfter(SHOP_CLOSE_TIME)){ throw new IllegalArgumentException("주문 시간이 아닙니다. 관리자에 문의하세요"); } return new Order(currentDateTime, beverages); }

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
권하루 댓글 2 좋아요 0 조회수 288

인기 태그

인프런 TOP Writers

주간 인기글