월 16,940원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
단방향 설정이 가능한지 궁금합니다!
안녕하세요!강의영상에서는 가능한 많은 예제를 보여주려고다양한 연관관계 매핑을 사용했다고 하셨는데 단방향을 지향하는 실무 관점에서 궁금한게 있습니다.Order N:1 Member => 다대일 단방향이 가능한지OrderItem N:1 Order => 다대일 단방향이 가능한지Order와 Delivery 관계에서 단방향이 안되는 이유Item과 Category를 일대다, 다대일로 풀어내는게 맞는지답변해주시면 감사하겠습니다!!
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
메이븐 프로젝트 생성할때 오류가 발생해요
안녕하세요. 제가 기존에 이클립스를 사용했어서 이클립스로 메이븐 프로젝트 생성하려는데 아래 사진처럼 오류가 발생하고 생성이 되지 않습니다 ㅠㅠ 왜그런걸까요..? 그리고 이클립스 사용해도 되는건지 궁굼합니다...
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
스칼라 타입 영속성 컨텍스트
엔티티 프로젝션은 영속성 컨텍스트에서 관리되고, 임베디드 타입 프로젝션은 영속성 컨텍스트에서 관리되지 않는데, 그러면 스칼라 타입은 영속성 컨텍스트에서 관리되는건가요? 관리되지 않는건가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
LocalDateTime 해결 후 pom.xml에서 에러 발생
안녕하세요!원래는 에러가 안 떴는데 private LocalDateTime orderDate;에서 LocalDateTime을 해결하니깐 갑자기 다음과 같은 에러가 발생했습니다.해결방법 알려주시면 감사하겠습니다!
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
ManyToOne 관계 설정 시 궁금한 점이 있습니다.
[질문 내용]안녕하세요! 강의를 들으며 제 사이드 프로젝트의 데이터베이스를 설계하는 과정에서 궁금증이 생겨 질문드립니다. 저는 Content라는 엔티티 클래스를 만들고 이를 상속받는 Post, Comment 클래스를 만들었습니다. Content라는 부모 엔티티 클래스를 만든 이유는 내용을 담는 body라는 필드를 Post와 Content가 동일하게 가지기 때문입니다. 후에 프로젝트가 커지면 image, link등과 같은 여러 필드들이 Content에 추가될 예정입니다. 이때 Post는 title 필드를 추가적으로 가지고 있고 Comment를 여러 개 가질 수 있는데, 일반적인 상황에서 동일한 엔티티 클래스를 상속받은 클래스끼리도 이러한 ManyToOne 관계를 가지게 설계하는지 궁금합니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
패치 조인을 이렇게 이해해도 될까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요좋은 강의 만들어주셔서 감사합니다.강의를 보다가 이해가 어려운 부분이 있어서 질문드리고 싶은데패치조인을 이렇게 이해해도 될까요?1번 질문입니다.실무에서는 지연로딩으로 기본 세팅을 합니다.지연로딩은 즉시로딩보다 단점이 적기 때문입니다.(조인 개수와 성능 문제 관련)그러나 지연로딩도 최악의 경우 N+1 의 문제가 발생할 수 있습니다.그 보완책이 패치조인입니다.2번 질문입니다.패치조인은 지연로딩이 N+1 의 문제가 될 수 있는 특수한 상황에서만 즉시로딩을 할 수 있게 해줍니다.즉 연관관계에 있는 엔터티들을 JOIN FETCH로 명시하는 쿼리를 날려주면즉 하이버네이트가 해당 엔터티들끼리 조인을 날려줍니다.3번 질문입니다.아래의 쿼리가 잘못된 이유를 가르쳐주시면 감사하겠습니다.String query = "select t From Member m join fetch m.team t"; List<Team> result = em.createQuery(query, Team.class).getResultList(); 아래의 쿼리가select t From jpql.Member m join fetch m.team t SQL에서는 아래의 쿼리와 같다고 생각하는데 에러가 생깁니다. select team.* from member join team on member.team_id = team.id4번 질문입니다.3번 질문과 연관되는 질문입니다.1번째 쿼리는 되고 select m From jpql.Member m join fetch m.team 2번째 쿼리는 안되는 이유가 궁금합니다. select t From jpql.Member m join fetch m.team t 1번째 쿼리는 team이 있는 member를 가져오는 것이고 2번째 쿼리는 member가 있는 team을 가져오는 것이기 때문입니다. 그런데 JPA에서는 왜 2번째 쿼리가 오류가 발생하는건지 이해가 어려워 가르쳐주시면 감사하겠습니다.5번 질문입니다.아래의 쿼리는 왜 안되는건지 가르쳐주시면 감사하겠습니다.String query = "select m From Team t join fetch t.members m"; List<Member> result = em.createQuery(query, Member.class).getResultList(); 긴 질문을 읽어주셔서 감사합니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
강의 11:54 단축키 질문입니다.
[질문 내용]안녕하세요. 강의 11:54초에 mappedBy 속성에 값을 넣을 때 사용하신 단축키를 알고 싶습니다(mac).감사합니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@ManyToOne Category parent 질문 있습니다.
@ManyToOne@JoinColumn(name = "parent_id")private Category parent; @OneToMany(mappedBy = "parent")private List<Category> child = new ArrayList<>(); 안녕하세요.위 코드에서 부모 쪽에 다대일 매핑 한 이유를 알고 싶습니다.아니면 DB 테이블 안에서 부모 셀프 외래 키를 만들어서조회할 때 이 외래 키를 참조하여 자식 카테고리들까지 같이 조회하게 만들었기 때문에 테이블에서 다는 parent_id니까jpa에도 parent에 다를 준 건 가 싶기도 해서요필드 명에 부모 자식이 있어서 부모는 하나고 자식은 여러 개인데 부모 쪽에 다로 돼있어서 헷갈리네요..
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
Sequence 방식 allocation 기본 값 50에 대한 이해
안녕하세요 allocation 방식에 대해 좀 헷갈려서제가 이해한게 맞는지 문의 드릴려고 합니다.. 제 생각을 정리 해봤습니다. allocation 기본값 50 설정은 실제 DB 쿼리 문은 2번만 날려 시퀀스 값을 미리 51로 설정 해놓아 메모리상으로 51까지 순차적으로 증가시킨 후 51까지 도달되면 다시 DB로 시퀀스 증가 쿼리문을 날려 101로 증가돼 성능 이점을 챙긴다. 물리적 DBDB 한번 호출 시퀀스 값 1 / PK 값 1DB 두 번 호출 시퀀스 값 51 / PK 값 2===============================이제 메모리에서 1씩 가져옴 물리 DB PK 값이 51번까지 게속 사용PK 값이 51까지 도달된다면 DB로 시퀀스 50 증가 쿼리 전송동시성은 메모리에 이미 올라와 있는걸 사용하기 때문에 문제 없음
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
JPA와 OOP
JPA 공부하면서 느끼는 점이 엔티티 자체 또는 엔티티 간의 협력관계를 잘못 구성하면 쿼리도 점점 이상해져 간다고 생각합니다. 이에 OOP에 대한 이해가 정말 중요하다는 생각이 드는데, 맞나요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
외래키 지정
연관관계의 주인을 외래키의 위치와 관련해서 정한다고 하셨는데, 이 외래키의 위치도 테이블 설계할 때, Member 테이블에 OrderId 방식으로 할지, Order 테이블에 MemberId로 할지는 자주 조회되는 형태를 기준으로 외래키 위치를 정하면 될까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@ManyToMany 대체 방법
실전에서는 @ManyToMany를 사용하지 않아서, 테이블의 N:M 관계는 중간 테이블을 이용해서 1:N, N:1로 매핑하는 것을 권장한다고 하셨는데, 중간 테이블을 이용하여 1:N, N:1로 매핑하는 걸 권장한다고 말이, @jointable 만들지 말고, 예를 들어 OrderItem 같은 엔티티와 테이블을 만드는 방법을 말씀하시는건가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
값 타입 컬렉션 27분 30초 값 타입 컬렉션을 remove() 할 때 질문드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요값 타입 컬렉션 27분 30초 질문드립니다. findMember.getAddressHistory().remove(new Address("old1", "street", "10000"));이 코드를 실행할 때deletefromADDRESSwhereMEMBER_ID=?이 쿼리가 실행되어 ADDRESS 테이블에서해당 멤버 id를 외래키로 가지는 레코드를 전부 지우는 것이 이해가 되지 않아서 질문드립니다.저는 자바 코드에서 MEMBER_ID, CITY, STREET, ZIPCODE 에 해당하는 정보를 모두 가지고 있기에아래의 쿼리가 실행되어, 레코드를 하나만 삭제해야 한다고 생각했습니다.deletefromADDRESSwhereMEMBER_ID=? (예를 들어 1)AND CITY=? (예를 들어 newCity1)AND STREET =? (예를 들어 street)AND ZIPCODE=? (예를 들어 10000)이러면 해당 레코드를 JPA에서 직접 식별하고 접근해서 삭제할 수 있을 것입니다.그런데 왜 JPA에서는 2번째 쿼리가 아닌 1번째 쿼리가 실행되어 불필요하게 레코드를 많이 삭제하는지 궁금해서 질문드립니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
em.getReference 로 조회 후 사용하지 않았는데 디버깅 모드에서는 select 문이 실행되네요.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (아니오)[질문 내용]IDE 일반모드에서는 예상대로 select 문이 실행안되는데 디버깅 모드로 실행 시에는 select 문이 실행되네요. IDE 디버깅 모드인 경우에는 IDE 가 member2를 사용하는 건가요? public class JpaMain2 { public static void main(String[] args) { final EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpashop"); final EntityManager em = emf.createEntityManager(); // 여러 쓰레드에서 공유하면 안됨! 하나의 트랜잭션 당 1개 final EntityTransaction tx = em.getTransaction(); // 여러 쓰레드에서 공유하면 안됨! 하나의 트랜잭션 당 1개 tx.begin(); try{ Member member = new Member(); member.setName("hello"); em.persist(member); em.flush(); em.clear(); Member member2 = em.getReference(Member.class, member.getId()); System.out.println("-----------------"); tx.commit(); }catch (Exception e){ tx.rollback(); }finally { em.close(); emf.close(); } } }
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@JoinColumn
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@JoinColumn에서의 속성 name은 @Column 어노테이션의 name과 같은 걸까요 ? Member의 team이 디비에 저장될 때의 컬럼명을 지정할 수 있는지 확인하려 @Column 어노테이션을 추가로 붙였더니 @ManyToOne 어노테이션이 붙으면 동시 사용이 안된다는 오류 메시지가 나와서 @JoinColumn의 name 을 바꿔줬더니 컬럼명에 해당 name이 반영되는 걸 확인했습니다.그럼 member 테이블의 @JoinColumn어노테이션의 name값을 컬럼명으로 하는 fk 값은 @JoinColumn 어노테이션이 붙은 entity와 연결된 table의 pk의 값과 조인되는 거라고 이해하면 될까요 .. ? 연관관계 매핑이 잘 정리가 안되어서 코드를 이해하기 어려워요 ..
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
orphanRemoval 동작에 관한 질문 드립니다.
public class Father { @Id private long id; @OneToOne(mappedBy = "father", cascade = CascadeType.PERSIST, orphanRemoval = true) private Child child; public void removeChild() { if (this.child != null) { this.child.father = null; this.child = null; } } } public class Mother { @Id private long id; @OneToOne(mappedBy = "mother", cascade = CascadeType.PERSIST) private Child child; } public class Child { @Id private long id; @OneToOne @JoinColumn(name = "mother_id") @OnDelete(action = OnDeleteAction.SET_NULL) private Mother mother; @OneToOne @JoinColumn(name = "father_id") @OnDelete(action = OnDeleteAction.SET_NULL) private Father father; }#상황Father Mother ㅤㅤ└┳┘ㅤㅤChild의 형태로 연관관계를 맺고 있습니다.orphanRemoval 은 Father에만 설정된 상태입니다.이러한 상태에서, 몇 가지 테스트를 해본 결과입니다.(1) Father#removeChild() 호출 시 (연관 관계만 제거), Mother가 연관을 가지고 있더라도 Child 엔티티가 삭제됩니다. (2) Mother 엔티티를 삭제한 후에, Father 엔티티를 삭제하면, Child 엔티티는 삭제됩니다. (3) Mother 엔티티를 삭제하지 않고, Father 엔티티만 삭제하면, Child 엔티티는 삭제되지 않습니다.#질문(1), (2)번의 경우 이해한대로의 동작이나, (3)번 동작이 이해가 가지 않습니다.직접 연관관계만 끊을 때와 삭제해서 끊어지는 경우가 다르게 동작하는 것인지... 궁금합니다!
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@GenerateValue(strategy=GenerationType.IDENTITY)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@GenerateValue(strategy=GenerationType.IDENTITY) 일 경우에만 pk값을 알 수 없어서 commit 전에 insert 쿼리를 날리는 것은 이해 했는데commit 시점에 진행될 작업들이 매번 flush를 호출해서 영속성 컨텍스트의 데이터가 commit 전에도 지속적으로 디비에 반영이 되는 걸까요 ?? 아니면 pk 값을 알기 위한게 목적이기 때문에 persist의 경우만 예외적인 건가요 ???
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@OneToMany
'자바 ORM 표준 JPA 프로그래밍 - 기본편' -기본 문법과 쿼리 API- Order 클래스에는 @ManyToOne @JoinColumn(name = "PRODUCT_ID") private Product product; @ManyToOne을 작성해주는데 Product 클래스에는 @OneToMany를 작성하지 않는건가요??작성하지 않아도 실행이 잘되었습니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
영속성 컨텍스트와 Unique 제약 조건에 대해 질문 있습니다.
영한님의 JPA 서적/강의로 JPA를 학습하는 동시에 개인 프로젝트를 병행하여 JPA에 대한 연습을 하고 있습니다.Unique 제약 조건을 추가하는 과정에서 궁금증이 생겨 질문 드립니다. 영속성 컨텍스트는 그 자체로 Unique 제약 조건을 검증하지 않나요?chatGPT에게 질문을 했을 때의 '영속성 컨텍스트는 unique 제약 조건을 확인하지 않고 DB에 해당 역할을 위임한다; 라고 대답하였는데, 달리 검증할 방법을 모르겠어 이곳에 질문 드립니다.아래와 같은 상황을 방지하기 위해서는 데이터 저장 로직에 em.flush()를 함께 써 주는 것이 가장 바람직한 접근 방법일까요?영한님의 다른 답변을 참고하면 데이터 저장의 빈도수가 상대적으로 적기 때문에 em.flush()를 한번 더 호출하는 것이 큰 성능 저하를 가져오지 않을 것 같고, 문제 해결도 되는 것 같습니다만, 제가 놓치는 부분이 있을까 하여 질문 드립니다.테스트에 @Rollback(value=false)를 추가하면 데이터가 예상한 대로 실패하던데, 해당 어노테이션의 유무가 어떤 차이를 가지기에 결과가 달라지는건지 함께 여쭤봐도 될까요??강의 내용에 대한 질문보다는, 강의 내용에 기반을 둔 프로젝트 질문이라 여기에 질문을 드려도 되는지 모르겠습니다만, 혹여나 도움을 받을 수 있을까 하여 질문 드립니다. '영속성 컨텍스트의 동작 원리' 쯤 내용들은 관련 자료가 쉽게 찾아지지 않아 궁금증을 어떤 식으로 해결할 수 있을지 모르겠습니다 ㅠㅠ질문 이해를 돕고자 아래에 문제 상황도 함께 추가하여 질문 드립니다. 배경 설명질문 상황이 이해가 쉽도록 최대한 간단히 프로젝트 구성 설명 드립니다.유저의 데이터를 저장하는 DAO를 구현 중입니다. User 모델@Entity @Table(name = "USERS") @Getter @Setter @NoArgsConstructor public class User { @Id @GeneratedValue @Column(name = "IDX") private Long idx; @Column(name = "NAME") private String userName; @Column(name = "ID", unique = true) private String id; @Column(name = "PASSWORD") private String password; }유저의 ID가 중복되지 않도록 ID 컬럼에만 @Column( ... unique = true) 를 사용하였습니다. UserDAO@Repository public class UserDAO { @PersistenceContext private EntityManager em; public long save(User user){ em.persist(user); return user.getIdx(); } //... } 마지막으로, Unique 제약 조건을 확인하기 위한 테스트 코드 입니다.중복되는 ID 값을 가진 유저를 저장할 때 어떤 예외가 발생하는지 직접 확인하기 위해 실패하는 테스트 코드를 작성하였습니다. UserDAOTest @ExtendWith(SpringExtension.class) @SpringBootTest class DBUserDAOTest { @Autowired UserDAO userDAO; @Test @Transactional public void sameIdSaveTest(){ //given DBUser user1 = new DBUser("User1", "sameId", "PW1"); DBUser user2 = new DBUser("User2", "sameId", "PW2"); //when long savedIdx1 = userDAO.save(user1); long savedIdx2 = userDAO.save(user2); //that } 문제 상황동일한 ID 값인 "sameId"를 사용했음에도 문제가 없이 테스트가 통과하는 모습입니다. 로직 변경public long save(DBUser user){ em.persist(user); em.flush(); return user.getIdx(); }위와 같이 em.flush()를 추가하면 예상과 같이 테스트가 실패합니다.DataIntegrityViolationException이 발생합니다.
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
복합키 끼리의 매핑 질문 드립니다.
안녕하세요.현재 JPA강의를 통해 회사내 프로젝트중인 직장인 입니다.실무 중에 강의의 복합키 매핑과는 조금 다른 내용이 있어 며칠을 고민하다 문의 드립니다. 각각 복합키를 가진 두 개의 테이블이 있습니다.두 테이블은 code라는 공통 컬럼이있고 다대일관계로 매핑을 구성하려고 합니다.@EmbeddedId관계를 이용해 구성하려고 합니다.code 컬럼만 매핑시키는 방법을 찾지 못해 문의 남겨드립니다. 현재 문제의 테이블입니다.(회사프로젝트 테이블이라 자세히 올려드리는 못하는 점 양해 부탁드립니다.)Company Table은 code, biznumber 두 개의 pk로 구성돼 있습니다.Contract Table 역시 code, module 두 개의 pk로 구성돼 있습니다.저는 두 테이블에서 code라는 컬럼만 갖고 다대일 매핑을 구현하고 싶습니다.즉 복합키를 각각 가진 두 개의 테이블에서 각각 하나의 컬럼만을 이용해 다대일 매핑을 구현하고 싶습니다.제가 에러 내용과 과정을 올리고싶은데 회사코드라 올리면 문제가 생길까 싶어 이렇게 말로 표현드려 죄송합니다.