묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실전! Querydsl
OneToMany 좋은 예제
먼저 좋은 강의 감사합니다. OneToMany 관계를 맺고있는 엔티티의 경우 JPA2 활용에서는 여러가지 방법으로 성능을 끌어올릴수있도록 하는 예제를 보여주셨는데 querydsl 로는 안보여주신것 같아요. 혹시 querydsl 을 사용해 OneToMany 관계의 엔티티를 모두 가져오는 좋은 방법이 있을까요.
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
@GeneratedValue 질문입니다.
안녕하세요 김영한 선생님 '프록시와 연관관계 관리 - 영속성 전이(CASCADE)와 고아 객체' 강의를 수강하는 중, 해당 강좌의 7분 58초 부분에 @GeneratedValue에 의해 생성된 PK 값에 대한 질문입니다. 질문: "단일 소유자(엔티티, 부모)인 PARENT에 완전 종속이 되는 CHILD이기 때문에, child 엔티티 PK 값의 GeneratedValue 또한 parent로 부터 영향을 받는가요?" 이와 같은 질문은 다음의 과정들로 인해 가지게 되었습니다. 강좌에서 생성된 parent 엔티티의 PK는 1, 그리고 각각의 child 엔티티의 PK는 2와 3이 할당(Generated)되었습니다. 저는 'PARENT와 CHILD는 서로 다른 테이블이기 때문에, parent 엔티티의 PK 값은 1이 할당되고, 각각의 child 엔티티 PK 값은 1과 2가 할당되어야 하는 것이 아닌가?' 라는 궁금증이 생겼습니다. 이를 확인하기 위해 다음과 같이 수행해 보았으며 사진과 같은 결과를 얻었습니다. parent PK: 1, 4child PK: 2, 3, 5, 6 이러한 결과로 인해, 위의 질문과 같은 정리를 하였는데 제가 제대로 이해한 것이 맞을까요? (+) 코드 내의 주석처리한 m.t. (= my thought) 부분 또한 제가 제대로 이해한 것이 맞을까요? ====== 그리고, 좋은 강의 너무 감사드립니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
api개발고급;컬렉션조회 최적화 챕터 -> 주문조회V5 강의
안녕하세요. 실무에서는 setter 열어두면 안된다고 하셨는데, 아래 코드의 경우, setOrderItems을 어떻게 대체 해야 하나요? 감사합니다. result.forEach(o -> o.setOrderItems(orderItemMap.get(o.getOrderId())));
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Category 연관관계 편의메서드
category에 연관관계 편의 메서드 만드실 때 public void addChildCategory(Category child){ this.child.add(child); child.setParent(this);} 이렇게 만드셨는데.. public void setParent(Category parent) { this.parent = parent; parent.getChild().add(this);} 이렇게 만들어도 되는거죠? 만약 된다면 왜 첫번째 처럼 만드셨는지 궁금합니다.. 항상 잘 듣고 있습니다!
-
미해결실전! Querydsl
@QueryProjection과 fetch join
List<ProjectionResult> fetch = queryFactory .select(new QProjectionResult(classA.id, classA.relStatus.stringValue(), classA.relResult.stringValue(), classA.name, )) .from(classA) .join(classA.classB, classB).fetchJoin() .join(classB.classC, classC).fetchJoin() 안녕하세요. 위와 같이 join fecth와 queryprojection을 같이 사용하는 예제에서 실행하면 Caused by: org.hibernate.QueryException: query specified join fetching, but the owner of the fetched association was not present in the select list [FromElement{explicit,not a collection join,fetch join,fetch non-lazy properties, 와 같은 예외를 발생시킵니다. select(new QProjectionResult)가 아닌 select(classA)를 하면 정상적으로 결과가 처리되는데 어떤 차이가 있고 어떻게 해결을 해야 할까요 ? 감사합니다.
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
샘플 데이터를 파일로 입력하기
json 포멧의 샘플 데이터를 파일로 가지고 있을 때, 이것을 입력하기 위한 가장 좋은 방법은 어떤 것이 있을 지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
도메인분석설계 챕터 => 엔티티설계시주의점 강의 14분쯤
안녕하세요. jpa가 컬렉션을 persistentBag으로 랩핑하기 때문에, 컬력션을 필드에서 초기화한 후 바꾸지 말라고 하셨는데, 컬렉션을 바꾼다는 의미가 새로운 컬력션을 생성하거나, set이나 map 등의 다른 컬렉션으로 바꾼다는 의미인가요? 감사합니다.
-
미해결실전! Querydsl
querydsl로 where in 절 표현하기
API 개발과 성능 최적화 강의 주문 조회 V5 JPA에서 DTO 직접 조회 - 컬렉션 조회 최적화 강의 를 보면서 querydsl로 변환해 보는 공부를 하고 있습니다. 위의 코드에서 where in 절은 querydsl 로 어떻게 나타내야 하는지 궁금합니다
-
해결됨실전! 스프링 데이터 JPA
@Transactional관련 질문 입니다.
package study.querydsl.repository;import org.junit.jupiter.api.AfterEach;import org.junit.jupiter.api.BeforeEach;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.annotation.Rollback;import org.springframework.transaction.annotation.Transactional;import study.querydsl.entity.Member;import javax.persistence.EntityManager;import javax.persistence.PersistenceContext;import java.util.ArrayList;import java.util.List;@SpringBootTest@Transactional@Rollback(false)class MemberRepositoryTest { @PersistenceContext private EntityManager em; @Autowired private MemberRepository memberRepository; @Test public void test() throws InterruptedException { List<Member> members = makeList(); for (Member member : members) { test1(member.getId()); Thread.sleep(1000); } } private List<Member> makeList() throws InterruptedException { List<Member> members = new ArrayList<>(); for (int i = 0 ; i < 20 ; i++) { Member member = new Member("gon " + i, i); members.add(member); } memberRepository.saveAll(members); em.flush(); //<--- insert query는 생성되나 db 에는 아직 없음. Thread.sleep(5000); return members; } protected void test1(Long id) { Member member = memberRepository.findById(id).get(); member.setUsername("Park"); memberRepository.save(member); em.flush(); //<--- update query는 생성되나 db 에는 아직 없음. }} 안녕하세요 위와 같은 예제에서 makeList 메소드에서 생성된 리스트를 실 db에 insert를 하고 각 리스트 아이템을 처리하는 test1 메소드에서 처리된 아이템을 insert 를 하고 싶은데 em.flush를 해도 insert, update 쿼리만 발생되고 db에는 아직 결과가 들어오지 않고 test가 완전히 종료가 되는 순간 db에 값이 들어온것으로 확인 됩니다. 이를 해결하기 위해서 class에 @transactional 을 제거하고 test1 메소드에 @Transactional을 붙이니 의도한대로 makelist에서 리스트 결과가 한번 db에 저장되고 test1 메소드에서 처리된 결과도 순차적으로 db에 인서트 되는것으로 확인 했으나 연관관계가 존재하는 경우 fetch lazy 동작이 no session으로 안되던데 이를 해결하는 방법이 있는지요. 질문을 정리하면 1. Transactional 중간에 db에 값을 쓰는 방법이 있는지. 2. class에서 @Transactional을 제거 하고 test1에 @Transactional을 붙이면 연관관계 fetch lazy가 동작을 하지 않는 이유가 무엇인지 (제가 이해를 했을땐 test1 부터 영속성 컨텍스트가 관리되어 이후 메소드 호출부터는 transaction이 걸려서 fetch lazy가 동작될거라고 예상했습니다. ) 친절하고 자세한 답변 늘 감사드립니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
일대다 단방향
안녕하세요. 이번 편을 듣고, 일대다 단방향 강의를 다시 들었는데, 거기서, "설계상의 손해를 보더라도 다대일 양방향으로 만들기를 권장한다" 라고 하셨는데, 이번 강의의 경우가 어쩔수 없이 일대다 단방향을 해야하는 경우인가요? 감사합니다.
-
미해결실전! Querydsl
벌크 연산시 flush 호출 여부에 대해 궁금한 점이 있습니다.
안녕하세요. 선생님 벌크연산 강의 중에 질문이 있습니다. JPA 프로그래밍 책에서 JPQL 실행 시 플러시가 자동 호출되어서 영속성 컨텍스트에 있는 쿼리문이 db에 동기화 되는걸로 알고 있는데 벌크 연산은 update 쿼리이기 때문에 자동으로 플러시가 호출되지 않아서 강제로 플러시를 호출해줘야 되는건가요? 이 부분에 혼동이 있어서 질문드립니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
hashCode equals 무한루프 해결 방법문의
안녕하세요 강사님. 동등성 비교를 할 경우 값타입과는 다르게 엔티티의 관계에서는 ManyToOne 과 같은 연결관계가 있는경우 서로가 서로의 equals를 호출하는 경우가 있는데 이를 해결하기 위해 강사님께서 선호하는 방식이 있는지 알고 싶습니다. 저의 생각은 ManyToOne과 같은 비교가 있는경우 그 필드를 제외하는 것이 낫지 않을까 싶었습니다. 이유는 1. 동등성은 @Id로도 충분하지 않을까 하는 생각.2. Team의 동등성을 꼭 체크하지 않아도 Team의 동등성은 Team을 따로 빼서 해도 되지 않을까 (하지만 이것도 생각해보면 Team의 동등성을 따로 검사해야 하나 라는 생각이 듭니다.) 이었습니다. 강사님은 어떻게 생각하시는지 궁금합니다.
-
미해결실전! Querydsl
groupby having절 사용시 fetchCount(), fetchResults() 사용 가능 여부
안녕하세요 도사님 그 동안 JPA 강의 올려주신것 모두 (회사의 지원을 받아)잘 봤습니다. final JPAQuery<Long> countQuery = queryFactory .select(gcm.memberId.count()) .from(gcm) .join(gcm.member, member) .where(member.dropDt.isNull(), gcm.adId.isNotNull(), gcm.adId.isNotEmpty()) .groupBy(gcm.memberId) .having(gcm.adId.count().eq(1L));return PageableExecutionUtils.getPage(content, pageable, () -> countQuery.fetchCount()); return PageableExecutionUtils.getPage(content, pageable, () -> countQuery.fetch().size()); 위 코드는 스프링 JPA를 활용한 QueryDSL 부분에 나오는 도사님의 코드를 참고(복사)하여 만든 코드입니다. 저는 fetchCount()를 사용하고 싶지만 fetchCount()나 fetchResults()를 사용하면 아래와 같은 에러가 발생하여 어쩔 수 없이 fetch()를 사용하고 있습니다. groupby having 절을 사용 할 때만 fetchCount()나 fetchResults()를 사용하면 에러가 발생하는 것 같습니다. Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: having near line 5, column 1 [select count(distinct gcm.memberId) from com.neibus.admin.fcm.repository.Gcm gcm inner join gcm.member as member1 where member1.dropDt is null and gcm.adId is not null and not length(gcm.adId) = 0 having count(gcm.adId) = ?1] 버그인가 싶다가도 이런 버그가 있었다면 강의 내용중에 언급하셨을거라는 생각에 제가 잘못한거라 믿고 도사님께 기대 봅니다. 혹시 제가 잘못한 부분이 있는 건지 아니면 groupby having 절을 사용하면 fetch()만 사용할 수 있는건지 궁금합니다.
-
미해결실전! Querydsl
@DataJpaTest
QueryDsl 강의 잘듣고 있습니다! QueryDsl을 사용하면 @DataJpaTest를 사용하지 못하나요? JPAQueryFactory에 대해서 NoSuchBeanDefinitionException이 발생하는데 따로 주입하는 방법을 모르겠습니다ㅠㅠ
-
해결됨실전! Querydsl
from절의 서브쿼리 해결방안
안녕하세요. from절의 서브쿼리 해결방안으로 애플리케이션에서 쿼리를 두 번 분리해서 실행하라고 하셨는데, 이 말씀이 첫 번째 쿼리로 인라인 뷰에 해당하는 결과리스트를 구하고 이 결과를 두 번째 쿼리의 from절이나 join절에 테이블(뷰) 형식으로 넣을 수 있다는 말씀이신지요?
-
미해결더 자바, 코드를 조작하는 다양한 방법
JVM Memory 메서드 영역과 metadata space 의 차이점
안녕하세요 새해복 많이 받으세요:) 더자바 완강 후 메모리구조에 대해 다시 스터디하고 있습니다. 그러던 중 java8 부터 바뀐 metadata space 에 대해 알게 되었는데요, 힙 영역과 분리되어있고 메타데이터(클래스 이름, 메서드 정보 등)을 담고 있는 걸로 확인했습니다. 더자바 강의에서 메모리의 메서드 영역에 클래스 수준의 정보(풀패키기 경로, 메서드 이름, 변수 명 등)를 담는걸로 학습했던 기억이 있어 두 개념의 차이점을 알고 싶어 질문 남깁니다. 좋은 강의 올려주셔서 감사합니다!
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
단위 테스트, 통합 테스트에 대한 질문입니다.
안녕하세요. '주문 도메인 개발 - 주문 기능 테스트' 강의 마지막 부분에서 DB와 상관없이 단위 테스트를 해보는 것도 중요하다라고 언급을 해주셨는데요. 강의를 듣고 이해한 단위 테스트라는 것은 JPA를 이용하는 문법(Service, Repository)까지 테스트 하지 않고, 엔티티 클래스(Order, OrderItem 등)에 선언된 비즈니스 로직 메소드만 가지고 잘 동작하는지 테스트 하는것을 의미하는 것인가요? 예를 들어, '주문 상품 재고 감소' 테스트 코드를 작성한다면, 초기값이 설정된 회원과 주문 상품 객체를 생성한 후 주문시 'Service,'와 'Repository'를 사용하지 않고 순수 엔티티 클래스에 정의된 비즈니스 로직 메소드가 잘 동작하는지 확인하는 코드를 작성하면 되는 것 일까요? 위 내용이 맞다면 단위 테스트의 대상은 아래와 같겠네요. OrderItem Class의 createOrderItem(), Order Classs의 createOrder(), Item Abstract Class의 removeStock() 미리 답변 감사드립니다.
-
미해결실전! Querydsl
안녕 하세요
entitymanager는 thread에 safe하지 않는걸로 알고 있습니다 근데 강의에서 thread에 safe하다고 하셔서 확인해보니 safe하지 않네요. spring container가 thread safe하게 관리해주는 것으로 알고 있습니다 맞나요?
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
영한님! 질문있습니다!
on 대신에 where해도 되지 않나요?!
-
미해결실전 JSP (renew ver.) - 신입 프로그래머를 위한 강좌
강의자료 다운로드가 안됩니다ㅠㅠ
강의자료 다운로드를 눌렀는데 밑의 사진처럼 연결할 수 없다는 화면만 뜨네요. 확인 한번만 부탁드립니다 :)