월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
cascade의 위치 질문드립니다.
cascade는 연관관계의 주인쪽에 있어야하나요, 아니면 거울쪽에 있어야하나요?강의에서는 Parent(조상 엔티티)쪽에 위치했는데 연관관계의 주인 같은것과 상관없이 조상 엔티티 쪽에 있어야하는 것 같기도 하고 말이죠...
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
em.find 관련 질문입니다
public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); //code EntityTransaction tx = em.getTransaction(); tx.begin(); try { Member findMember1 = em.find(Member.class, 101L); Member findMember2 = em.find(Member.class, 101L); tx.commit(); } catch (Exception e) { tx.rollback(); } finally { em.close(); } emf.close(); } } 위 코드를 실행하면 select 쿼리가 한번만 나가야 하는데 저 같은 경우는 두번 나가고 h2에서 id가 101인 엔티티도 사라집니다. 왜 그런가요? 아래는 실행했을 때 로그에 뜨는 쿼리입니다 Hibernate: select m1_0.id, m1_0.name from Member m1_0 where m1_0.id=? Hibernate: select m1_0.id, m1_0.name from Member m1_0 where m1_0.id=?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
객체 수정 후 참조값이 의도한 대로 나오지 않아요!!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요! 마지막에 객체의 참조를 수정하면 update 쿼리가 날라감으로써 DB 내 참조 값도 바뀌는 것을 확인했습니다.하지만, 여기서 드는 의문이 다음의 코드에서 객체의 참조값을 수정했음에도 불구하고 다음 실행 때 확인해보면 변경 전의 참조값이 출력됩니다. 이거 왜이러는 걸까요??
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
초기 porm.xml 관련 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요 초기 porm.xml 관련하여 찾아보면서 해결할려고 시도하였으나 오류가 계속해서 발생되어 질문 드립니다 ! 자바 8이상 버전 상관 없으시다고 하셨는데 17버전으로 하게되면 문제가 발생하는 지? 11버전은 있어 11버전은 괜찮은 지?디펜던시 설정을 진행하였으나 hibernate와 h2 두 디펜던시 모두 에러가 발생하고 있습니다. 이미지 첨부 >오류 내용
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
h2 DB TCP 연결이 안됍니다
test 접속하면 연결이되고 db도 생깁니다.하지만 tcp로 연결이 안됩니다.db파일 삭제 여러번 해봤습니다.자바 17,. 스프링 부트 3,x , h2 2.2.224 버전입니다.이유가 뭘까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
JPQL 컴파일 오류
JPQL 함수 강의에서 사용자 정의 함수 호출 부분 설명에서 컴파일 오류가 발생헀는데 강사님이랑 코드 작성 똑같이 했는데 함수값이 틀린거 같은데 저 빨간색 코드 부분을 뭐라고 수정을 해야 하나요??
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
기본 생성자
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Address 클래스에 기본 생성자를 만들지 않으면 insert 쿼리가 나오지 않던데 이 이유에 대한 내용이 어느 파트에서 나왔었는지 찾고싶어요!
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
14분 50초 일대다 페치조인 질문
public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); System.out.println("zzzzzzzzzzzzzzzzzzzzzzzzzzzz"); //비영속 try{ Team teamA = new Team(); teamA.setName("teamA"); em.persist(teamA); Team teamB = new Team(); teamB.setName("teamB"); em.persist(teamB); Member member1 = new Member(); member1.setUsername("member1"); member1.setTeam(teamA); em.persist(member1); Member member2 = new Member(); member2.setUsername("member2"); member2.setTeam(teamA); em.persist(member2); Member member3 = new Member(); member3.setUsername("member3"); member3.setTeam(teamB); em.persist(member3); Member member4 = new Member(); member4.setUsername("member4"); member4.setTeam(null); em.persist(member4); em.flush(); em.clear(); String query ="select t From Team t join fetch t.members"; List<Team> result = em.createQuery(query, Team.class).getResultList(); for (Team team : result) { System.out.println("team= " + team.getName() + "|members=" + team.getMembers().size()); } tx.commit(); } catch (Exception e){ tx.rollback(); e.printStackTrace(); }finally { em.close(); } emf.close(); }이 코드를 실행시켰더니 14분 50초에 나오는 3줄이 나오는 것이 아닌team= teamA|members=2 team= teamB|members=1이렇게 나오는데 혹시 어떤 이유에서 그런것인지 궁금합니다.
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
일대일 양방향 연관관계에서 N+1 문제
엔티티 연관 관계Recruitment <(1)---(1)> Study 엔티티 코드@Entity public class Recruitment { @Id @GeneratedValue @Column(name = "recruitment_id") private Long id; @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "id") private Study study; }@Entity public class Study { @Id @GeneratedValue @Column(name = "study_id") private Long id; @OneToOne(mappedBy = "study", fetch = FetchType.LAZY) private Recruitment recruitment; } 질문Recruitment 를 조회하고 Study 프록시 객체에 접근할 때, Recruitment 조회 쿼리가 한 번 더 나가는 이유를 모르겠습니다. (자세한 내용은 아래 코드의 주석으로 추가했습니다.) 테스트 코드 @Test @Transactional void test() { Study study = new Study(); study.setTitle("스터디A"); studyRepository.save(study); Recruitment recruitment = new Recruitment(); recruitment.setStudy(study); recruitment.setTitle("스터디A의 모집공고"); recruitmentRepository.save(recruitment); entityManager.flush(); entityManager.clear(); // ---------------------// Recruitment findRecruitment = recruitmentRepository.findById(1L).get(); // Recruitment 조회 System.out.println("findRecruitment.getStudy() start"); Study findStudy = findRecruitment.getStudy(); System.out.println("findRecruitment.getStudy() end"); System.out.println("findStudy.getTitle() start"); String title = findStudy.getTitle(); // Study 지연로딩만 나갈 것으로 예상했지만, Recruitment 조회도 발생함 System.out.println("findStudy.getTitle() end"); }SQL 로그select r1_0.recruitment_id, r1_0.id, r1_0.title from recruitment r1_0 where r1_0.recruitment_id=? // "findStudy.getTitle() start" (Study 지연 로딩) select s1_0.study_id, s1_0.title from study s1_0 where s1_0.study_id=? select // Recruitment 조회 로직이 왜 또 나가는가? r1_0.recruitment_id, r1_0.id, r1_0.title from recruitment r1_0 where r1_0.id=? // "findStudy.getTitle() end"
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
entity 필드의 접근 제한자를 private으로 줘야 하는 이유
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.영한님 안녕하십니까. jpa 공부하면서 프로젝트 진행 중에 문제가 있어 질문 드립니다.entity의 경우 필드값을 private 접근 제한자를 줘야 하는 이유가 있을까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
고아객체..이해가안되요
cascadeType.ALL 로 했을때부모엔티티 삭제하면 당연히 자식도 다 삭제되자나요?그런데 orphanRemoval = true가 왜 필요한가요?어차피cascadeType.ALL 로 하면 부모가 사라졌을때 자식도 다 삭제되는데..
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
엔티티매니지먼트팩토리 생성질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]수업내용에서 엔티티매니저팩토리는 생섭 비용이 많이 들어서 애플리케이션에 보통 한 개만 생성한다고 하셨는데persistence.xml 파일에 엔티티매니저팩토리를 하나만 생성해야 한다는 의미 인가요?
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
AddressEntity delete
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용] 강의 후반부에서 member의 addressHistory에 AddressEntity를 추가하는 것까지 알려주셨는데member의 addressHistory에서 AddressEntity 값 하나를 삭제하고 싶을때이런 방식으로 하는게 맞는지 궁금합니다.equals와 hashCode도 잘 고친건지도 궁금합니다. //Address의 equals, hashCode @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Address address = (Address) o; return Objects.equals(getCity(), address.getCity()) && Objects.equals(getStreet(), address.getStreet()) && Objects.equals(getZipcode(), address.getZipcode()); } @Override public int hashCode() { return Objects.hash(getCity(), getStreet(), getZipcode()); } //AddressEntity의 equals, hashCode @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; AddressEntity that = (AddressEntity) o; return Objects.equals(getId(), that.getId()) || Objects.equals(getAddress(), that.getAddress()); // } @Override public int hashCode() { return Objects.hash(getId(), getAddress().getCity(), getAddress().getStreet(), getAddress().getZipcode()); // } Member findMember = em.find(Member.class, member.getId()); List<AddressEntity> addressHistory = findMember.getAddressHistory(); addressHistory.remove(new AddressEntity("city1", "street", "zipcode"));
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
영속성 컨텍스트 flush 질문입니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]이전에 동일한 질문을 주신 분들이 있었는데 답변이 잘 이해가 가지 않아 질문 드립니다.영속성 컨텍스트에서 flush() 메소드를 직접 호출하면DB에 바로 요청이 나간다고 강의에 나와있습니다. (DB 반영은 X)이 부분 까지는 이해가 갑니다. 그런데 이전 강의에서 commit() 가 동작하면 flush() 가 동작한다고 했습니다.그러면 결국 코드상에서 flush()가 2번 요청이 되어 쿼리가 2번 나가야 맞는거 같은데 이해가 안가서 질문드립니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
어떤 경우에 양방향 연관관계를 사용하나요??
[질문 내용] 제가 생각하는 양방향 연관관계를 사용하는 이유는 다음과 같습니다. 1) 조회 : team.getMembers().stream ... 근데 이러면 모든 Member 들이 DB에서 불러와지니까 만약 조회해야 할 대상이 많은 경우(members가 너무많아서 페이징 처리를 해야 하는 경우) 는 양방향 연관관계를 삭제하고 그냥 JpaRepository 에서 쿼리로 페이징 쿼리를 작성해야 한다. 2) CascadeType.all 혹은 orphanRemoval true 를 위한 매개체 1번, 2번 이외에는 쓸데없는 것 맞을까요?? 특히 강조한 부분의 제 생각이 맞는지 궁금합니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
양방향 연관관계와 연관관계의 주인
안녕하세요! 현재 열심히 공부하고 있는 취준생입니다. 다름이 아니라 지금 복습을 하다가 연관관계의 주인 쪽이 좀 살짝 헷갈려서 질문을 남기게 되었습니다. 제가 이해한 바로는 다대일, 일대다 -> 다(N) 이 연관관계의 주인 , 연관관계의 주인만이 외래키를 등록, 수정 가능하다로 이해했습니다. 지금 제가 첨부한 2번째 사진을 보면 MEMBER 에 TEAM_ID 라는 외래키가 있고 MEMBER 가 다(N) 이기 때문에 연관관계의 주인이다. 여기까지는 완벽하게 이해를 했습니다.근데 제가 지금 헷갈리는 포인트가 뭐냐면, 주인은 mappedBy 속성을 사용할 수 없다고 했습니다. 근데 mappedby 뜻 자체가 ~에 의해 되었다 니까 mappedby = "" 에 오는게 주인 아닌가요?? 결론적으로 제가 궁금한것은 3번째 사진에 @OneToMany(mappedby = "team") 이 부분인데, team 객체와 TEAM_ID 라는 외래키가 연관관계를 맺고 있어서 해준건가요?....ㅠㅜㅜㅜ 너무 헷갈리네요 ㅜㅜㅜㅜㅜ 지금 Member 클래스에 private Team team; 이라는 코드가 있는데, mappedby 뒤에 온 team 이 private Team team 이 team 인거 같은데 왜 mappedby = "team" 이렇게 된건가요?? 외래키와 연관관계를 맺고 있어서 그런건가요?
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
양방향 연관관계
사진속에서 List memebrs 가 있는 이유가 Team 과 Member 가 서로를 조회하기 위해서 있는게 맞는건가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
값 타입 컬렉션 중복저장
강의에서 값 타입 컬렉션은 모든 컬럼이 기본키가 되기 때문에 중복저장이 되지 않는다고 하셨는데 중복 저장이 가능하여 문의 드립니다.public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { Address address = new Address("city", "street", "1"); Member member = new Member(); member.setUsername("member1"); member.setWorkAddress(address); member.getFavoriteFoods().add("치킨"); member.getFavoriteFoods().add("피자"); member.getAddressHistory().add(address); member.getAddressHistory().add(address); em.persist(member); em.flush(); em.clear(); System.out.println("====================="); Member findMember = em.find(Member.class, member.getId()); List<Address> addressHistory = findMember.getAddressHistory(); addressHistory.forEach(Address::getCity); Set<String> favoriteFoods = findMember.getFavoriteFoods(); favoriteFoods.forEach(System.out::println); findMember.setHomeAddress(new Address("newCity", address.getStreet(), address.getZipcode())); // 치킨 -> 한식 findMember.getFavoriteFoods().remove("치킨"); findMember.getFavoriteFoods().add("한식"); // 주소 변경 findMember.getAddressHistory().remove(new Address("city", "street", "1")); findMember.getAddressHistory().add(new Address("newcity", "new", "100")); tx.commit(); } catch (Exception e) { e.printStackTrace(); tx.rollback(); } finally { em.close(); } emf.close(); }
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
실전 예제 1 인텔리제이 무료 버전 프로젝트 생성
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용] 질문 1.현재 인텔리 제이 무료 버전을 사용하고 있는 수강생입니다.실전 예제 1 - 요구사항 분석과 기본 매핑을 시작하려는데강의에서 프로젝트를 새로 생성하는 부분에서[위 사진은 강의 영상][위 사진은 인텔리 제이 무료 버전 사진] 일단 강의와 프로젝트 생성 부분이 다르며,maven Archetype으로 선택하여 같은 부분에jpabook, jpashop을 작성하고 create하면[아래 사진처럼 빨간부분을 선택하라고 나옵니다.]여기 부분을 어떤걸 선택하여 프로젝트를 생성해야 할까요??? 질문 2.인텔리제이 무료 버전은 이것만 나오는지도 궁금합니다. 답변 주시면 감사하겠습니다.!
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
CascadeType 자식 엔티티 삭제
public class JpaMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tr = em.getTransaction(); tr.begin(); try{ Parent parent = new Parent(); Child child = new Child(); Child child1 = new Child(); parent.addChild(child); parent.addChild(child1); em.persist(parent); em.flush(); em.clear(); Parent newParent = em.find(Parent.class, parent.getId()); Child child2 = newParent.getChildList().get(0); em.remove(child2); tr.commit(); } catch (Exception e){ tr.rollback(); e.printStackTrace(); } finally { em.close(); } emf.close(); } }안녕하세요 CascadeType 관련해서 질문을 남깁니다. Parent에 CascadeType을 ALL 또는 PERSIST로 했을 때 위에서 child 삭제 쿼리가 나가지 않습니다. 다른 속성들은 모두 잘 동작을 하는데 왜 저 두 속성만 안되는건지 혹시 알 수 있을까요?