월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바 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 삭제 쿼리가 나가지 않습니다. 다른 속성들은 모두 잘 동작을 하는데 왜 저 두 속성만 안되는건지 혹시 알 수 있을까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
어떤 경우 cascade 를 적용해도 되는지 이해가 되지 않습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예[질문 내용]스프링 cascade 활용도 측면에서 궁금한 것이 있습니다. 영한님 - 인프런 (inflearn.com)이 질문을 남겼었던 수강생입니다! 잠깐 상황을 요약하면 Program 과 Review 그리고 User 가 다대 1 1대 다 로 묶여 있는 상황입니다. program 에서 program.addReview 메서드를 활용하기 위해 cascade type 을 적용하였었습니다. 하지만 영한 님은 이부분의 코드는 별로 좋은 코드가 아니다! cascade 옵션 질문 - 인프런 (inflearn.com)를 참고해서 보아라. 라고 하셨습니다. 위 질문의 요약은 강의에서 Order 는 OrderItem 을 개인 소유 하나, Order 와 Delivery 는 Delivery 가 여러 곳에서 참조할 수 있으므로 개인 소유 하지 않는다. 라고 읽었습니다. 참조 하는 것과 Cascade Type .all 이 무슨 관계가 있는지 모르겠습니다. 6줄요약하면: Delivery 와 Review 는 여러 곳에서 참조할 수 있으므로 CascadeType all 을 붙이지 말라고 하신 것 같은데 여러 곳에서 참조가능성이 있으면 CascadeType all 을 왜 붙이지 말아야 하는지 궁금합니다. 단순히 계속 코드를 보며 추적해야 하는 것 때문인가요?? 이 부분이 와닿지 않습니다. 혹시 실제 예를 들어 설명해주실수 있나요??
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
강의 내 커리큘럼 엑셀로 받아볼 수 있나요
복습용으로 강의 내 커리큘럼 리스트를 받아보려고 하는데 일일이 수작업으로 하려고 하니 좀 번거로워서 문의드립니다. 혹시 커리큘럼을 export 할 수 있는 기능이 있나요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
9:52초 테이블 생성 부분 질문드립니다.
ORDERS 테이블의 ORDER_ID 컬럼은 만들지 않으신 것 같은데 혹시 이 부분 생략하신건가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
EntityManager의 쿼리 순서 보장
1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요. JPA의 영속성 컨텍스트의 쿼리 순서 보장에 대해 궁금한 점이 있어 연락드렸습니다.@Transactional public void deleteUser(Long userId) { seniorRepository.findByUserId(userId).stream() .forEach(seniorService::deleteSenior); User user = findUserById(userId); userRepository.delete(user); } senior 객체가 user객체를 외래키로 가지는 상태입니다.user 객체를 삭제하고, senior 객체는 삭제하지 않기 위해서 위와 같은 코드를 작성하였습니다. deleteSenior 메서드에서는 senior의 User 참조 값을 null로 바꾸어 주는 역할을 수행합니다.그리고 같은 트랜잭션 내에서 user까지 삭제하는 코드입니다. 위 코드에서 senior의 User 참조 값을 null로 변경하는 update 로직과, user를 삭제하는 delete 로직이 트랜잭션이 종료된 시점에 한번에 쿼리로 생성되어 데이터베이스로 날아가는것이 맞는지 궁금합니다. 만약 그렇다면, 두 쿼리의 순서를 보장할 수 있는지 궁금합니다.엔티티 매니저는 key-value 형태로 정보를 저장한다고 하여 순서가 보장되지 않을 것 같은데, 순서가 보장된다면 어떤 것에 의해서 순서가 보장되는지도 알려주시면 감사하겠습니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
H2데이터 베이스에 데이터가 사라져요
===[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Member를 생성할 때까진 잘 되다가 조회하는 단계에서System.out.println 출력문은 안뜨는 이유가 무엇일까요? h2 데이터베이스에 가보면 저장했던 member가 사라져있습니다. 영속성이 사라진 건가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
임베디드타입과 @MappedSuperclass의 차이
둘 다 상속관계 매핑과 관련 없고 속성만 상속받기 위해 사용되는 것 같은데 어떤 차이가 있는지 알 수 있을까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
JPQL 숫자 연산 함수 관련해서 문의드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요. COUNT(*) 함수를 사용해서 Member의 수를 카운트 하는 테스트를 했는데, 반환 타입을 Integer로 넣어서 Integer가 나올 것으로 기대했으나 IillegalArugumentException이 발생했습니다. 문제는 아래 쿼리에서 컴파일 오류가 발생하지 않았다는 점인데, 실제로 실무에서는 SELECT절 함수를 통한 값을 얻어 올 때 어떻게 사용하는지 궁금합니다.예를 들어 타입드 쿼리 대신 Query를 사용해 Object를 받아 인티저 타입으로 캐스팅한다던지, 함수가 반환하는 명확한 타입을 모두 알고 사용해야 하는 것인지, 또는 위 문제를 해결 할 수 있는 다른 방법이 있는지 알려주실 수 있나요 ? TypedQuery<Integer> query1 = em.createQuery("SELECT count(m) from Member m", Integer.class);
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
매핑 어노테이션에 대한 궁금증
복습 중 매핑 어노테이션들에 대한 궁금증이 생겼습니다. 1. 해당 매핑 어노테이션들이 강의의 예제처럼 ddl-auto에서 create 옵션을 주는 상황처럼, JPA에서 자체적으로 테이블을 생성하는 경우에 적용되는것인가.2. 혹은 해당 어노테이션들이 사용자가 따로 DB에서 테이블을 미리 생성해둔 경우에 객체와 관계형 데이터페이스를 매핑하기 위한 용도로 사용되는 것인가.혹은 매핑 어노테이션 1, 2번 모두에 해당되는건가요?
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
이제야 양방향 연관관계를 왜 쓰는지 알겠네요..
질문은 아니고여 ㅋㅋㅋ 복습겸 다시 듣고 있는데뭐하나 알아가서 기분 좋아 올립니다.. Domain model 패턴으로 다른 강의도 그렇고 엔터티에 영한쌤 비지니스 로직이나 양방향 메서드나 생성메서드 등 꾸겨 넣으셔서 첨엔 뭔 엔터티에 저렇게 많이 넣으시나 했는데 이제서야... 연관관계 메서드를 '진짜' 왜 쓰는지 알게 됐네요.. 외래키 주인이 아닌 쪽에서는 아무리 상대방 엔터티를 지지고 볶아도 (조회 제외) db에 값이 안들어가는 것을 보고.. 1차경악.. 영한썜이 양쪽 다 세팅 후 정상적으로 돌아가는 것을 보고 2차경악...결국은 양쪽 다 값으 ㄹ세팅해줘야 하는데 그것을 어느 한곳에서 까묵지 않기 위해서 외래키 주인인쪽에서 연관관계 메서드를 작성...... 첨 들을 때 연관관계 메서드 설명해주실 떈 그러려니 햇고 와닿지 않앗는데 이제야 유레카!를 외쳣슴돠...영한쌤은 복선의 신입니다
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
h2 연결이 안되는 것 같아요
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]이전에 h2에 username과 password를 설정해버렸는데 h2랑 연결이 안됐는데 이렇게 피드백을 주셔서 해결한 줄 알았고 실행을 했는데 여전히 이렇게 오류가 뜹니다아예 h2를 삭제하고 다시 다운하는게 나은 선택일까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
프록시 강의 38:45초 질문드립니다.
Member member1 = new Member(); member1.setUsername("hello"); em.persist(member1); em.flush(); em.clear(); Member reference = em.getReference(Member.class, member1.getId()); // 영속성 컨텍스트에서 가져옴 System.out.println("reference.getClass() = " + reference.getClass()); // em.detach(reference); em.close(); System.out.println("reference.getUsername() = " + reference.getUsername());
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
프록시 객체와 영속성 컨텍스트
강의 내용과 PPT를 봤을 때는 프록시 객체가 영속성 컨텍스트에 저장되지 않는 것으로 느껴졌는데, 찾아보니 프록시 객체도 영속성 컨텍스트에 저장되더라고요. 만약, 같은 PK값을 가진 프록시 객체와 엔티티 객체가 모두 영속성 컨텍스트에 존재하는 상황이라면 어떤 모습으로 각각이 존재하게 될지 알 수 있을까요. PDF의 도식으로 개념을 구조화했는데 이 상황은 잘 그려지지 않아 질문드립니다.
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
[JPA] 테이블 생성 시, 컬럼 순서
안녕하세요, 강의를 듣던 중 소소한 궁금증이 생겨 아래와 같은 질문을 남깁니다. 사진을 보시면, 영한님의 JPA 실행 결과에서는 선언한 컬럼 순서대로 테이블의 컬럼이 구성되어 있는 것을 확인할 수 있습니다.그런데, 제 실행 결과를 확인하면 알파벳 순서대로 컬럼이 구성되어 있더군요.1-1. 테이블 내 컬럼의 순서를 fix 시킬 수 있는 방법이 존재하는지1-2. 없다면, 어쩔 수 없는 부분으로서 실제 운영 환경에서는 어떻게 처리하는지 위 두 내용을 질문드립니다.감사합니다.