월 16,940원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
persistence
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. https://drive.google.com/file/d/1o6p8SoEIhKZASTIlAnHRlSmc5F4gkK6s/view?usp=drive_link persistence부분과 h2버전 설정하는 부분에서 에러가 발생했는데 방법을 모르겠습니다.이것떄문인지 h2에 들어가서 연결시켜도Unsupported database file version or invalid file header in file "C:/Users/PC/jpashop.mv.db" [90048-224] 90048/90048 (도움말)라는 에러가 뜹니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
단방향 vs 양방향 성능 차이
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]양방향 매핑을 할 때와 단방향 매핑을 할 때의 성능 차이가 있나요?그러니까, 단방향 매핑을 한 후, 각 엔티티의 레포지토리를 통해 명시적으로 조회하는 것과, 양방향 매핑을 한 후, get을 사용하여 조회하는 상황의 성능 차이에 대해 궁금합니다. 지연로딩을 사용하는 경우, 결국 나가는 쿼리 수는 같지 않나요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
객체지향 쿼리 언어1 - 기본 문법 > 소개 7:28 쿼리가 안나가요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]아래 소스로 실행했는데 select 쿼리가 안나갑니다 select문에 where절 빼고 실행하면 select되긴 하는데 이유가 뭔지 모르겠어요 package jpabook.jpashop; import jpabook.jpashop.domain.Book; import jpabook.jpashop.domain.Member; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; import java.util.List; 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 { List<Member> result = em.createQuery( "select m from Member m where m.username like '%kim%'" , Member.class ).getResultList(); for (Member member : result) { System.out.println("member = " + member); } tx.commit(); } catch (Exception e) { tx.rollback(); } finally { em.close(); } emf.close(); } }
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
자바17 기본설정
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 자바 17로 학습하고 있는데 기본설정에 javax가 포함되어있어 질문 드립니다자바17이상은 jakarta를 써야한다고 알고있는데 javax를 써도 무방한건가요 ??답변 부탁드립니다 !!
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
persistence 찾을 수 없다고합니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]이클립스로 구동시키려 하고 있습니다. 다름이 아니라 분명 src/main/resources/META-INF/persistence.xml 완벽하게 경로 넣었다고 생각하는데 사진과 같은 Could not find ~에러가 출력됩니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
값타입 비교법 equals()
강의 "값타입 비교" 에서 equals를 오버라이드해서 쓰셨는데 저는 항상 그냥 특정 스트링이나 객체가 같은지 비교할때 equals썼었거든요 그렇게 하면 안됐던건가요?? 어떤경우든 항상 객체에 맞게 오버라이드해야하나요??
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
이너클래스로 새로운 엔티티! 와 임베디드 차이?
이너클래스로 새로운 엔티티만들어서 엔티티에 넣어주는것과 와 임베디드를 엔티티에 넣어주는것의 차이?가 궁금합니다엔티티만들때 엔티티안에 임베디드타입으로 넣어주셨는데이부분은 이너클래스나 다른클래스로 따로 엔티티를 만들어 그부분에 넣어줘도 되는것 아닌가요? 둘의 차이가 무엇인가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
일대일 매핑, 매니투원 두개만 지연로딩으로 바꿔주면 되나요?
만일 실무에서 개발을 하게되면 일대일 매핑, 매니투원 두개만 즉시로딩이니 이 두개만 항상 지연로딩으로 바꿔주면 되나요??
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@Lob과 @Column(columnDefinition = "TEXT")
현재 강의를 보고 스스로 게시판 서비스를 만들어 보고 있는데요!게시물 본문(content) 컬럼에 @Lob과 @Column(columnDefinition = "TEXT") 중 어떤 것을 써야 좋은지 궁금해서 질문 드립니다! 찾아봐도 자료가 많이 없더라고요..@Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity public class Post extends BaseEntity { @Column(name = "post_id") @GeneratedValue(strategy = GenerationType.IDENTITY) @Id private Long id; @Column(length = 100, nullable = false) private String title; // @Column(columnDefinition = "TEXT", nullable = false) // @Lob private String content; }
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
트랜잭션 롤백에 관한 질문
tx.begin() Member member = new Member(); member.setName("start"); em.persist(member); tx.commit(); 안녕하세요 트랜잭션 공부를 하다가 질문이 생겨 이렇게 글 남기게 되었습니다! 위처럼 작성하면, Member 테이블에 잘 생성됨을 확인했는데요,트랜잭션 롤백의 작동에 대해 이것저것 해보다가 tx.begin(); Member findMember = em.find(Member.class, 저장된member아이디); try { findMember.setName("newName"); throw new Exception(); } catch (Exception e) { tx.rollback(); } System.out.println(findMember.getName()); // 이 줄에서 원래의 start가 나오길 기대했으나, newName이 나옵니다 findMember 객체가 영속성 컨텍스트에 의해 관리되고 있으므로, 트랜잭션이 롤백된다면 마지막 프린트 문에서 findMember의 name 속성이 원래의 상태인 'start' 로 돌아가길 기대했는데요.질문: 실제로 프린트를 해보니, 'start'가 아닌 'newName'으로 인식되어 이렇게 프린트되는 이유가 궁금합니다!제가 이해하려고 시도한 것.. 조금 이해가 안되어서 em.contains(findMember) 를 해보니, 정확히 tx.rollback() 이전에는 true, 이후에는 false로 출력이 되더라고요. 위의 결과로 추정해본 바로는 tx가 엔티티 객체를 직접 인식하는 것이 아니라, em안의 1차 캐시의 변경된 내역을 인식하고 있고, 엔티티 객체는 그와 별개로 자바 코드에서 활용할 수 있는 용도인가..? 라고 이해를 해봤고,트랜잭션 롤백시, 엔티티 객체는 em과 연관없는 순수 자바 객체가 되며 때문에 객체가 있는 메모리 상의 바뀐 필드의 값이 다시 변경될 필요가 없는건가? (어짜피 트랜잭션으로 em안의 1차 캐시 변경부를 원상태로 바꿔주면 DB에는 아무런 변화가 없을 것이기 때문에) 라고 이해를 했습니다. 아무래도 혼자서 생각해본 이유이기에 정확하지 않을 것 같습니다.위와 같은 질문과 제 뇌피셜인,, 이해한 바에 대해 피드백 주시면 감사하겠습니다!! 감사합니다!!
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
양방향 매핑 후 getMemberList() 했을 때 빈 list 가 반환되는 이유에 대하여
transaction.begin(); try { Team teamA = new Team(); teamA.setName("teamA"); entityManager.persist(teamA); Member member1 = new Member(); member1.setUsername("Ken"); entityManager.persist(member1); Member member2 = new Member(); member2.setUsername("Jen"); entityManager.persist(member2); Member member3 = new Member(); member3.setUsername("Den"); entityManager.persist(member3); member1.setTeam(teamA); member2.setTeam(teamA); member3.setTeam(teamA); List<Member> memberList = teamA.getMemberList(); System.out.println("========"); System.out.println("memberList = " + memberList); // for (Member member : memberList) { // System.out.println("member = " + member.getUsername()); // } System.out.println("========"); transaction.commit(); 양방향 매핑 예제 관련하여 제 개인적인 예제를 실행하던 중 궁금한 점이 생겼습니다. teamA 객체 생성 + persist, 3명의 멤버 객체를 생성 + persist, 그러고 나서 전부 teamA 라는 데에 소속시켰습니다.persistentContext 에 추가된 상태이므로 team.getMemberList() 하면 세 명의 멤버가 담긴 리스트가 출력될 것이라고 생각한 것과 달리, 빈 리스트로 리턴됩니다. (마지막에 trx.commit() 까지 해서 H2 디비에는 잘 들어가있습니다) 왜 빈 리스트로 리턴되는 것일까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
페치 조인1 - 기본 질문 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Team teamA = new Team(); teamA.setName("팀A"); em.persist(teamA); Team teamB = new Team(); teamB.setName("팀B"); em.persist(teamB); Member member1 = new Member(); member1.setUsername("회원1"); member1.setTeam(teamA); em.persist(member1); Member member2 = new Member(); member2.setUsername("회원2"); member2.setTeam(teamA); em.persist(member2); Member member3 = new Member(); member3.setUsername("회원3"); member3.setTeam(teamB); em.persist(member3); String query = "select t from Team t join fetch t.members"; List<Team> result = em.createQuery(query, Team.class) .getResultList();위의 코드를 실행했을 때 강사님의 결과값은 3개가 나왔는데 저는 2개가 결과로 나왔습니다. 시간이 지나서 JPQL이 중복을 제거하게 바뀐 걸까요??
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
em.clear() , em.close()
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]Team team = new Team();team.setName("TeamA");em.persist(team); em.flush();em.clear(); 1차 캐시 비우기em.close(); 영속성 컨텍스트 종료로 알고 있는데 System.out.println(" =============== ");System.out.println("team = " + team.getId());System.out.println(" =============== ");이 team.getId() 값이 null이 아니라 해당 id 값이 출력될 수 있는 이유가 persist 할떄 team id 필드에 초기화 되서 인건가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
roletype 심볼을 찾을 수 없다고 합니다
사진과 같은 문제로 구글링을 해봐서 캐시도 지우고 재시작해보고 rebuild도 해봤는데 해결이 되지 않아 질문 남깁니다.
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
h2 database 관련 질문입니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요. 테스트 파일 있고.. h2아예 지우고 관련 파일 지우고 다시 깔아서 h2에는 접속은 되는데 인텔리제이에서 연결하려면 저런 코드가 뜨네요.. 어떤문제일까여
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
MappedBy는 읽기 전용으로 사용하는게 좋다고 하셨는데 CASCADE는 어떻게 등장한건가요?
[질문 템플릿]1. 예2. 예3. 예[질문 내용]CASCADE와 고아 객체 둘다 관계의 주인이 아닌 MappedBy 속성을 갖는 객체를 통해 주인 객체에 영향을 주는 것 같은데CASCADE가 수행하는 작업방식 보다주인 쪽에서 Insert를 수행하고 List쪽에 업데이트 된 주인 객체의 리스트를 읽어오는 게 더 자연스럽지 않나 의문이 들었습니다.고아 객체 또한 주인 쪽에 DELETE를 수행하고변화된 List를 읽어들이는게 저에겐 더 자연스럽게 느껴집니다.왜 CASCADE와 고아객체를 활용하면서 까지 주인 객체가 아닌 반대편에서 DB를 수정하는 작업을 수행하는지 궁금합니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
7분 4초 질문 있습니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]7분 4초에서 작성한 jpql 쿼리를 실행하면 강의에서는 cross join으로 쿼리가 작성되는 걸 확인할 수 있는데 저는 같은 코드를 작성해서 실행했을 때 아래처럼 내부조인으로 작성되는 걸 확인했습니다.Hibernate: /* select m from Member m, Team t where m.username = t.name */ select m1_0.id, m1_0.age, m1_0.TEAM_ID, m1_0.username from Member m1_0, Team t1_0 where m1_0.username=t1_0.name 왜 그런 걸까요?
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
양방향 관계에서
Member와 Team의 관계인 조건에서팀을 바꾼 다는 가정하에 Member의 TeamId 값을 바꿔보려고 코드를 구현 해봤는데생각하는대로 되지 안더군요. 어떻게 해야 하나요?Member findMember = em.find(Member.class, 3L); findMember.getTeam().setId(2L); tx.commit();Member에서 TeamId의 원래의 값이 1에서 2로 변경 하고자 하는 코드 입니다.업데이트 쿼리가 찍히지 않습니다. 도와주시면 감사하겠습니다.
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
연관관계 주인과 cascade가 상충되는 상황에 대해서
제가 알고 있기론 연관관계 주인만 엔티티 수정이 가능하고 아니면 조회만 가능하다고 알고 있습니다.@OneToMany(mappedBy = "team") private List<Member> members = new ArrayList<>();이 코드에서 team은 member을 조회만 할수 있습니다.Team team = new Team(); team.setName("TeamA"); em.persist(team); Member member = new Member(); //역방향(주인이 아닌 방향)에서 멤버 추가 시도 team.getMembers().add(member); //실패! 그러나 cascade 또는 고아 객체 제거 옵션을 사용하면 부모 엔티티를 통해 자식 엔티티의 생명주기를 컨트롤 할 수 있다고 배웠습니다.@Entity public class Parent { @Id @GeneratedValue private Long id; @OneToMany(mappedBy = "parent", cascade = CascadeType.PERSIST) List<Child> childList = new ArrayList<>(); }Child child1 = new Child(); Child child2 = new Child(); Parent parent = new Parent(); child1.setParent(parent); //연관관계 추가 child2.setParent(parent); //연관관계 추가 parent.getChildList().add(child1); parent.getChildList().add(child2); //부모 저장, 연관된 자식들 저장 em.persist(parent); 두 개념이 서로 충돌하는것 같은데 어떻게 동작하는 것일까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
JPA FULL TEXT SEARCH 에 관한 질문입니다.
영한님, 안녕하세요.본 강의와 맞지 않는 질문을 드린거 같아서 죄송합니다. 현재 댓글을 검색하는 기능에 기존 LIKE %keyword% 를 쓰는 방식보다 full text search를 적용하는 것이 성능 상 이점이 있다고 하여 적용 중에 있습니다. 하지만, 기존 like 방식보다 오히려 성능이 안나오는 현상을 겪고 있습니다. 10만 건을 테스트를 해보았고 100만건 1만건 5만건 모두 성능이 비등하거나 떨어집니다.. ex) 10만건 성능like = 429msfull text search = 476ms 의 성능을 보이고 있습니다. 뭔가 놓치고 있는 것 같습니다. 그런데 mysql 실행계획으로 퍼포먼스를 확인해보니, full text search가 2배 빠른 것으로 확인이 되는데 이게 왜 그런 건지 모르겠습니다.