월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
id값을 Integer로 했을때
id값을 Integer로 했을때 10몇억 까지만 된다고 하셨는데 int는 최대 21억까지 저장 할 수있는거 아닌가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
다대일 매핑 테일에 대해서.. spring jpa 연관관계
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]이런식으로 node 와 edge가 다대일 관계로마인드맵과 연관 관계를 맺으면 관리가 되나여.?node가 리스트 형식으로 저장되서 마인드맵의 id를 fk로 가져와서 이 마인드맵 번호로 관리할려고 하는데? 보통은 마인드맵쪽에서 다대일 관계로 되야하는데 그렇게 하면 이상해서..
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
메이븐 프로젝트
현재 Hello JPA - 프로젝트 생성 부분을 듣고 있는 수강생입니다.그 뒤에 있는 jpa 로드맵 모든 강의에서도 계속 메이븐 프로젝트로 프로젝트 진행을 하시는건가요?메이븐이랑 gradle 프로젝트는 많이 다를까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
H2 database 실행 안됨
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Create table Member()해서 테이블을 만들어서 실행버튼을 누르면 멤버테이블이 만들어 지잖아요 근데 실행버튼을 눌러도 테이블이 안만들어져요..
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
안녕하세요. 질문드립니다.
3분 14초에FAVORITE_FOOD와 ADDRESS 테이블에 PK에 일반적으로 사용하는 ADDRESS_ID와 같은 식별자를 쓰는 것이 아닌 MEMBER_ID를 쓰는 이유는 엔티티가 아닌 값타입이기 때문이라고 말씀해주셨는데요. 이 개념이 이해가 잘 안되네요.ㅠ.ㅠ 엔티티도 결국 테이블간 관계가 맺어진것이고, 값타입도 결국은 테이블간 관계가 맺어진거라면 저는 일대 다 관계랑 뭐가 다르지라고 생각하여 ADDREES테이블 PK도 별도로 만들려고 하면되지? 왜 MEMBER_ID값을 PK로 써야할까라는 생각이 듭니다. 경우에 따라 값타입으로 써야한다고 말씀을 주시는것같은데 부연설명좀 해주실수있을까요? PKMEMBER_ID1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
연관 관계 주인을 FK 없는 테이블의 엔티티로 지정했을 때 관련 질문입니다!
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요! 항상 강의 잘 듣고 있습니다 감사합니다 :-)다름이 아니라, <양방향 연관관계와 연관관계의 주인 1- 기본> 강의의 18분 쯤에 설명주시는 내용 중 FK가 존재하지 않는 Team을 연관 관계의 주인으로 지정하면, Member를 연관 관계의 주인으로 지정했을 때보다 INSERT 외 UPDATE와 같은 더 많은 불필요한 SQL 쿼리가 발생한다고 언급하신 부분이 정확하게 머릿속에 개념이 잡히지 않습니다 ㅠㅠ 혹시 추가적인 설명이나 예시를 주실 수 있을까요..?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
DirtyChecking 질문입니다!
회원을 수정하고, 회원의 닉네임이 중복되는 경우를 검증하고 싶었습니다. 더티체킹은 트랜잭션이 종료됐을 때 영속성 컨텍스트에서 변경된 것이 있는지 확인하고 변경된 것을 확인되면 업데이트 되는 것으로 알고 있는데요.@Transactional public void update(Long id, String name) { Member member = findOne(id); member.setName(name); validateDuplicateMember(member); } private void validateDuplicateMember(Member member) { // NullPointerException 발생 X List<Member> findMembers = memberRepository.findByName(member.getName()); if (!findMembers.isEmpty()) { throw new IllegalStateException("이미 존재하는 회원입니다."); } }제가 의도한 목적은 다음과 같습니다.회원을 조회 -> 영속성 컨텍스트 영속상태회원 객체에 대한 이름을 변경 -> 트랜잭션 종료 시 더티체킹 예상현재 객체 전달전달 된 회원의 이름을 가진 회원을 조회중복 시 Rollback, 아니라면 commit 후 더티체킹 이후 회원 엔티티 수정하지만 중복이 아님에도 중복 예외가 발생하길래 log를 확인해본 결과 List<Member> findMembers = memberRepository.findByName(member.getName());를 수행하기 전에 flush()가 되는 부분을 확인 할 수 있었습니다.의심되는 부분은 4번에서 회원을 조회하는 과정에서 쿼리를 수행해야해서, 그 과정에서 쓰기 지연 저장소에 있던 쿼리들이 flush() 된 것이 아닌가 하는 의심이 듭니다.그럼 제가 원하는 목적을 수행하기 위해서는 메서드를 아래와 같이 변경해야만 하는지..@Transactional public void update(Long id, String name) { validateDuplicateMember(name); Member member = findOne(id); member.setName(name); } private void validateDuplicateMember(String name) { // NullPointerException 발생 X List<Member> findMembers = memberRepository.findByName(name); if (!findMembers.isEmpty()) { throw new IllegalStateException("이미 존재하는 회원입니다."); } }다른 질문에서 중복 검증 시 영한님의 다음과 같은 답변을 확인 할 수 있었는데요.@Transactional public void update(Long id, String name) { Member member = findOne(id); validateDuplicateMember(member); member.setName(name); } private void validateDuplicateMember(Member member) { // NullPointerException 발생 X List<Member> findMembers = memberRepository.findByName(member.getName()); if (!findMembers.isEmpty()) { throw new IllegalStateException("이미 존재하는 회원입니다."); } }이 부분은 변경되기 전이고 이미 등록된 상태의 Member를 가져오는 것이기 때문에 회원 이름 수정 시 중복 가능성에 대한 예외를 검증하는 것이 아니지 않나 하는 생각이 들어서 질문드립니다..!
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
프로퍼티와 메서드의 초기화 질문입니다.
public class student { public int score; public int getScore() { return this.score; } }위와 같은 코드가 있고 연관관계 매핑이 되어있어 현재 프록시 상태라고 가정했을 때점수를 얻기 위해 student.score를 사용 하면 영속성 컨텍스트로부터 초기화를 받지 못하고, student.getScoret()를 하면 초기화를 받는 건가요 ? 만약 프로퍼티 접근을 사용했을 때 초기화를 받지 모한다면 studnet.score 안에는 무슨 값이 들어있게 되는 건가요 ?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
다대일 양방향 연관 관계의 주인 지정 관련 질문 드립니다!
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요! 항상 강의 잘 듣고 있습니다 :-) 기본적으로 제가 이해하고 있는 연관 관계 주인 개념이 맞는지, 그리고 다대일 양방향 연관 관계 주인 지정과 관련해 드리고 싶은 질문이 있어 글을 작성합니다! 제가 이해한 내용을 바탕으로 기본적인 연관 관계, 연관 관계 주인 개념을 아래와 같이 정리해봤는데, 제대로 이해하고 있는지 궁금합니다.JPA에서 제공하는 어노테이션을 이용해 Java 코드로 정의된 엔티티 클래스 간 연관 관계를 설정하면, JPA가 이 코드를 기반으로 테이블을 생성하게 된다. 이때, Member과 Team 엔티티 클래스 중 하나는 무조건 연관 관계 주인으로 지정해주어야 한다. 기본적으로 데이터베이스의 테이블은 외래 키를 통해 두 테이블 간의 관계를 설정할 수 있고, 한 쪽의 테이블에만 (관계를 맺을 테이블에 대한) 외래 키가 존재하면 JOIN을 통해 자유롭게 양쪽 테이블을 참조할 수 있다. (→ 단방향, 양방향(단방향*2) 연관 관계라는 개념이 테이블 간에는 존재하지 않는다.) 그런데 Member 엔티티 클래스의 필드에 member_id, name이 있고, Team 엔티티 클래스의 필드에 team_id, name 존재하고, 일대다 연관 관계를 JPA 통해 설정했을 때 JPA가 매핑 정보를 기반으로 테이블을 생성하는 상황을 생각해본다. JPA는 기본적으로 MEMBER 테이블, TEAM 테이블을 생성할 것이다. 그리고 MEMBER 테이블에는 member_id, name 컬럼이, TEAM 테이블에는 team_id, name 필드가 컬럼이 존재할 것이다. 그리고 JPA를 통해 설정한 연관 관계 또한 두 테이블에 반영해야할텐데, 이를 위해선 두 테이블 중 하나에 (관계를 맺을 테이블에 대한) 외래 키 필드를 추가해야 한다. 외래 키를 통해 테이블 사이의 관계를 설정할 수 있기 때문이다. 그런데 JPA는 이 외래 키 필드를 어느 테이블에 추가해야할지 자체적으로 결정을 내릴 수 없다. 회원 테이블에 팀 테이블로 접근할 수 있는 외래 키 필드를 생성하는 것이나 팀 테이블에 회원 테이블로 접근할 수 있는 외래 키 필드를 생성하는 것이나 결국 (단방향/양방향 연관 관계 개념 자체가 없는) 데이터베이스 테이블 입장에선 차이가 없기 때문이다. 그래서 JPA를 이용해 연관 관계를 지정해주어야, JPA가 어떠한 엔티티가 다른 엔티티를 참조하는 주체가 되는지 파악할 수 있고, JPA가 테이블을 생성할 때 다른 엔티티를 참조하는 주체 엔티티와 매핑될 테이블에 외래 키 필드를 추가할 수 있게 된다.Member, Team와 같은 다대일 연관 관계를 양방향으로 설정한 후, Team을 연관 관계의 주인으로 지정했을 때, Team 수정 시 모든 Member를 향한 불필요한 (UPDATE 등의) 쿼리가 발생할 수 있다는 게 잘 다가오지 않습니다... ㅠㅠ Member를 연관 관계의 주인으로 지정했을 때 Team 수정하는 경우와 비교해서 조금 더 자세히 설명해주시면 정말 감사하겠습니다!
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
flush를 하고 디비를 확인해보니 반영이 안되어 있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요. flush() 메소드에 대해서 테스트를 하다가 이상한 점이 있어 질문을 드립니다.강의 내용을 보면 플래시 과정은 "영속성 컨텍스트의 변경내용을 데이터베이스에 반영" 이라고 알려주셨는데요.디버깅을 통해서 살펴보니 flush() 호출시 로그에 쿼리는 잘 찍혀 보이지만 데이터베이스에 persist() 한 생성한 데이터는 h2에서 보이지 않습니다. 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 { Member member = new Member(); member.setId(200L); member.setName("member200"); em.persist(member); em.flush(); tx.commit(); } catch (Exception e) { e.printStackTrace(); tx.rollback(); } finally { em.close(); } emf.close(); } }위 코드에서 tx.commit(); 시점에 브레이크포인터를 삽입하고 살펴보면 em.flush() 는 호출되었기 때문에 h2에 있어야 하지만 실제 h2에서는 데이터가 보이지 않습니다.hibernate.hbm2ddl.auto는 auto 로 설정하였습니다.확인 부탁드려도 될까요?프로젝트 링크도 같이 전달 드립니다.https://drive.google.com/file/d/1mYBW0jItuLrV_jPEEYACtFEJ4Cf3Bh3V/view?usp=share_link감사드립니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
jpa fetch join 페이지네이션에 대해서 질문이 있습니다.
안녕하세요. JPA N+1 문제를 공부하고 이를 해결하기 위해서 fetch join을 사용하고 있는데 fetch join의 단점으로 페이지네이션이 적용이 안되는 것으로 강의와 책을 보고 학습했습니다.이를 직접 실습하기 위해서 실습을 해보면 한 엔티티와 연관관계를 가지는 2개의 연관관계 엔티티를 fetch join한 결과 페이지네이션이 잘 적용되어서 혹시 제가 모르는 예외적인 상황이 있나 해서 질문 드립니다.아래는 코드이고, (피드와 책은 다대일 관계이고, 피드와 유저는 다대일 관계입니다)실제로 호출된 쿼리는 아래 사진과 같습니다.limit 처리가 잘 된것처럼 페이지네이션이 잘 적용이 됩니다. 제가 알기로는 분명 fetch join을 사용하면 페이지네이션이 적용이 안되어야 하는데 뭐가 문제인지 해서 질문 드립니다...!
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
for(Member m : Members)에서 select 쿼리 발생하는 이유
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요. 양방향 연관관계와 연관관계 주인 1 - 기본 강의를 실습하다가 궁금한 내용이 생겨 질문드립니다.먼저, 아래와 같이 Member와 Team 객체 간의 양방향 연관 관계를 매핑하였습니다.DB에서 확인하기 위해 MemberA, MemberB를 같은 teamA에 소속되도록 저장한 후 Member findMember = entityManger.find(Member.class, memberA.getId()); 코드를 통해 DB에서 memberA를 가지고 왔습니다.위 코드를 실행시킨 결과는 아래 화면과 같습니다.제가 궁금한 내용은 아래 코드에서 select 쿼리가 왜 발생하는가? 입니다. 또 발생하는 select 쿼리의 해석이 어렵습니다.System.out.println("====for문에서 select 쿼리가 발생하는 이유가 뭘까?===="); for (Member m : members) { System.out.println("m name : " + m.getName()); } System.out.println("================");where 절에 해당하는 members0_.TEAM_ID=? 에 ? 값은 Member findMember = entityManger.find(Member.class, memberA.getId()); 코드를 통해 memberA가 가지고 있는 team_id 값을 가지고 있는 것일까요?또한, 그렇다면 어디서 team_id 를 가지고 있다가 비교를 하는 것인가요?마지막으로 결과값으로 MemberA, MemberB를 반환하는 것처럼 for문을 2번 반복하니깐 select 문도 2번 발생할 것으로 예상한 것과 달리 select문이 1번만 발생한 것도 이해가 가지 않습니다. 어떻게 select문 1번으로 memberA와 MemberB를 가지고 올 수 있나요? 궁금한 내용을 정리하면 아래와 같습니다.1. for(Member m : members)에서 select문이 발생하는 이유2. 해당 select문의 해석(특히 where절의 members0_.TEAM_ID=? 부분에 ? 값이 어떤 값인지, 어디서 team_id를 가지고 온 것인지)3. select문이 1번만 발생한 이유읽어주셔서 감사합니다. 답변 기다리고 있겠습니다!
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
em.find(), select문 질문
em.find(Member.class, 1L); System.out.println("========================"); tx.commit();위 코드를 수행한 결과 select문 이후에 '========================'가 출력되었습니다.em.find()를 하면 우선 1차 캐시에서 엔티티를 찾은 후, 없으면 바로 select문을 DB에 날리는 것이 맞을까요?tx.commit()하는 시점과 관계없이 1차 캐시에 엔티티가 없으면 바로 select 쿼리를 날리는 것이 맞을까요?
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
스냅샷 업데이트 관련 질문
'dirty checking에서 스냅샷은 엔티티의 최신 상태를 반영하고 있다. 스냅샷은 계속 업데이트된다'가 맞을까요?스냅샷이 처음에는, 엔티티가 1차 캐시에 들어온 상태에 대한 스냅샷이지만,엔티티를 변경하면 스냅샷도 변경되는 것이 맞을까요? 예를 들어, member 테이블에 (1L, "A")가 저장되어 있고, 스냅샷도 (1L, "A")인 상황에서, 다음 코드를 실행하였습니다.Member findMember = em.persist(new Member(1L, "A")); findMember.setName("AA"); tx.commit();tx.commit()이 호출되면 flush()가 호출되고, 엔티티와 스냅샷을 비교하여 update 쿼리가 DB에 전달됩니다. 그리고 비교한 시점 이후 어디에선가 스냅샷이 변경되는 것이 맞을까요? 스냅샷이 변경된다고 생각하게 된 상황은 다음과 같습니다. (엔티티를 (1L, "AA")로 변경한 이후) 엔티티를 (1L, "A")로 변경을 했을 때, update 쿼리가 DB에 전달되었기 때문인데요, 만약, 처음에 스냅샷이 (1L, "AA")로 변경되지 않았다면, 엔티티와 스냅샷은 (1L, "A")로 동일하였을 것이고, 따라서 update 쿼리가 DB에 전달되지 않을 것이기 때문입니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
쓰기 지연 관련 질문
상황: hibernate.jdbc.batch_size 옵션을 사용하지 않고, em.persist()를 4번 하였다.쓰기 지연 SQL 저장소에 insert 쿼리가 4개 존재하고, commit 시점에 DB에 insert 쿼리 4개가 전달된다는 것은 알겠습니다. 그런데, insert 쿼리가 DB에 전달될 때, 4번의 네트워크가 반복되는 것인가요? (https://www.inflearn.com/questions/41344/batch-size%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-%EC%A7%88%EB%AC%B8%EC%9D%B4-%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4 이 질문을 보고 질문드립니다)그리고 4번의 네트워크가 반복된다는 것이 'DB와 커넥션 맺고 insert 쿼리 1개 전달하고 커넥션을 종료'하는 과정이 4번 반복된다는 뜻인가요? 그렇다면 em.persist()할 때마다 insert 쿼리를 보내는 것과 무슨 차이가 있는 것이죠...?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
수업 자료 다시 다운로드
수업자료 한번 다운 받았었는데 컴퓨터 포맷해서 다 날라갔습니다.ㅜㅜ다시 다운 받을 수 없나요??
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
강의 내용에서 스키마 자동 생성 부분이 안되는데 어떤 게 문제일까요?
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]자바 ORM 표준 JPA 프로그래밍 - 기본편 14강 내용 중에 기존에 ID와 NAME만 있던 것에 ppt 내용대로 새롭게 추가하였는데 스키마가 변경된 테이블에 따라 자동으로 생성이 되지 않는데 해당 테이블을 drop 하고 실행하면 될까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
treat 관련 질문이 있습니다.
JOINED 전략을 명시한 Item 클래스와그런 Item 클래스를 상속한 Album, Book, Movie 클래스를 생성 후 코드를 다음과 같이 작성했습니다. EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); //애플리케이션 전체 공유 (persistence.xml 참조) EntityManager em = emf.createEntityManager(); //한번 쓰고 버려야함, 쓰레드간 공유하지 않음 EntityTransaction tx = em.getTransaction(); //조회를 제외한 DML 작업시 필수로 사용 tx.begin(); try { Album album = new Album(); album.setName("album"); album.setPrice(10000); album.setArtist("artist"); em.persist(album); Book book = new Book(); book.setName("book"); book.setPrice(20000); book.setAuthor("author"); book.setIsbn("isbn"); em.persist(book); Movie movie = new Movie(); movie.setName("movie"); movie.setPrice(30000); movie.setDirector("director"); movie.setActor("actor"); em.persist(movie); em.flush(); em.clear(); //1번 String jpql = "select i from Item i where type(i) in (Book, Movie)"; List<Item> items = em.createQuery(jpql, Item.class).getResultList(); for (Item data : items) { System.out.println("data : " + data); } em.clear(); //2번 jpql = "select i from Item i where treat(i as Book).author = 'author'"; //SINGLE_TABLE에서는 되는데 JOINED에서는 안 먹힘 items = em.createQuery(jpql, Item.class).getResultList(); for (Item data : items) { System.out.println("data : " + data); } tx.commit(); } catch (Exception e) { e.printStackTrace(); tx.rollback(); } finally { em.close(); } emf.close();1번의 경우에는 다음과 같이 정상적으로 동작합니다.Hibernate: /* select i from Item i where type(i) in (Book, Movie) */ select i1_0.Id, i1_0.DTYPE, i1_0.name, i1_0.price, i1_1.artist, i1_2.author, i1_2.isbn, i1_3.actor, i1_3.director from Item i1_0 left join Album i1_1 on i1_0.Id=i1_1.Id left join Book i1_2 on i1_0.Id=i1_2.Id left join Movie i1_3 on i1_0.Id=i1_3.Id where i1_0.DTYPE in('B','M') data : Book(author=author, isbn=isbn) data : Movie(director=director, actor=actor)그런데 2번의 경우에는 다음과 같은 현상이 발생하고 있습니다.Hibernate: /* select i from Item i where treat(i as Book).author = 'author' */ select i1_0.Id, i1_0.DTYPE, i1_0.name, i1_0.price, i1_1.artist, i1_2.author, i1_2.isbn, i1_3.actor, i1_3.director from Item i1_0 join Book i1_2 on i1_0.Id=i1_2.Id where i1_2.author='author'존재하지 않는 i1_1과 i1_3을 참조있어서 오류가 나는데왜 이런 현상이 발생하는지 궁금합니다. 그와 별개로 SINGLE_TABLE 전략을 사용했을 때2번을 실행하면 저같은 경우에는 다음과 같은 쿼리가 실행됩니다.Hibernate: /* select i from Item i where treat(i as Book).author = 'author' */ select i1_0.Id, i1_0.DTYPE, i1_0.name, i1_0.price, i1_0.artist, i1_0.author, i1_0.isbn, i1_0.actor, i1_0.director from (select * from Item t where t.DTYPE='B') i1_0 where i1_0.author='author' 그런데 강사님께서 제공해주신 pdf 파일에 보면원래는 쿼리가 다음과 같이 실행된다고 말씀해주셨는데select i.* from Item i where i.DTYPE = ‘B’ and i.author = ‘kim’제가 sql 실행했을 때와 강사님이 적어주신 sql이다른 이유가 제 생각에는 하이버네이트 버전차이때문일것 같긴한데 혹시 제 생각이 맞는지 질문드리고 싶습니다.※ 저는 하이버네이트 6버전을 쓰고 있습니다.
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
페치 조인 한계 - 둘 이상의 컬렉션은 페치 조인 할 수 없다
안녕하세요, '페치 조인 2 - 한계' 강의를 듣던 도중, 잘 이해가 되지 않는 부분이 있습니다. '페치 조인 2 - 한계' 강의 (6분 44초) 에서 다음과 같이 '둘 이상의 컬렉션은 페치 조인 할 수 없다' 라고 말씀해주셨습니다.제가 궁금한 점은, 이후 '실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화' 강의에서, /api/v3/orders api에서 아래와 같이 페치 조인을 하는 예시를 설명해주셨습니다.해당 api를 통해 페이징이 불가능하다는 것은 이해하였고 BatchSize를 통해 페이징이 가능한 형태로 최적화하는 방법은 이해하였습니다만, 둘 이상의 컬렉션을 페치 조인 할 수 없다고 말씀하신 부분은 잘 이해가 되지 않아서 이렇게 질문을 드립니다. 말씀해주신 둘 이상의 컬렉션이 다른 의미를 내포하는 것인지, 아니면 둘 이상의 컬렉션을 페치 조인할 수는 있지만, 최대한 지양해야 하는 것으로 이해하면 될지 궁금합니다. '실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화' 강의 내용이지만, 페치 조인의 한계에 대한 의문점이라서 본 강의에 질문을 드립니다. 감사합니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
강의때 들었던 내용을 블로그 같은걸로 작성해도 되는지 궁금합니다.
안녕하세요 취업한지 1년반정도된 주니어 개발자입니다.취업하기 이전에는 취미삼아 깃허브에블로그를 만들어서 pre에 코드프리터같은걸로 간단하게 개인 공부노트같이 만들어서 쓰고 있었는데취업하고 나서는 회사에서 운영 및 유지보수 위주로만 작업하고 그래도 최근에 플러터로 앱 제작을 하나 하긴했었지만 끝난지 벌써 몇달이 되면서 개발 자체에 흥미가 떨어진 상태였는데 최근에 아는 형이 강사님의 JPA 강의를 다시 보면서 공부에 재미를 다시 붙이고 있습니다.제 블로그를 보는 사람이 있으려나 모르겠지만최근에 마크다운으로도 깃허브 블로그를 쓸 수 있다는 것을 알고 기존의 pre로 작성된 게시글들을 md파일로 변경하는 작업을 하고 있습니다.그래서 이번 작업이 끝난 뒤 로드맵을 완강하면 정리해서 블로그에 쓸려고 했었는데 아까 말씀드린 형의 말로는강의같은거는 저작권때문에 문제가 생길수 있다고 들었습니다. 만약 개인적으로 블로그에 쓰고 싶을때는 어떤식으로 허락을 맡아야 게시글로 쓸수 있는지 궁금합니다.