공부를 하다보니 다대일 연관관계를 가진 테이블이 있다면, 항상 FK가 '다'쪽 테이블에 있는 것이 당연하다는 이야기가 나왔다. 그런데 나는 그 부분을 이해를 잘 하지 못했다. 그래서 실제로 그림을 그리면서 한번 이해를 해봤다. 두 가지 경우로 나눠서 한번 생각을 해봤다. 다대일 연관 관계, '다'쪽에 외래키가 있을 때 위와 같은 관계가 있다고 가정했을 때, MEMBER와 TEAM을 JOIN하기 위해서 FK가 어떻게 동작할지를 생각해봤다. MEMBER는 항상 한 군데 팀에만 속할 수 있다. 따라서, 이 MEMBER와 연결된 TEAM을 가져오기 위해서는 MEMBER가 가지고 있는 TEAM_ID로 JOIN을 하면 정상적으로 MEMBER와 연결된 TEAM 테이블을 함께 가져올 수 있다. 다대일 연관관계, '일'..
연관관계의 필요성 앞선 글에서는 테이블과 객체를 맵핑하는 것들만 따져보았다. 즉, DB의 테이블과 자바의 객체가 연결되는 과정이었다. 그 과정에서 주목해야 할 부분은 내가 맵핑했던 테이블은 다른 테이블과의 연관관계가 없었다. Member라는 테이블이 있었는데, Member는 누구와도 관계를 맺지 않는 독고다이 Table이었다. Team, Member가 있다. Member는 하나의 Team에만 소속될 수 있다. Member와 Team은 다대일 관계다. 그런데 이런 상황이 추가되었다고 가정해보자. 위의 상황을 표로 도식화해보면 아래 그림과 같다. 테이블 관계만 따져보면 MEMBER와 TEAM Table은 TEAM_ID를 FK로 가지고, 그 값으로 서로 연관관계를 가지는 것을 알 수 있다. 반면 아직까지 그림..
JPA의 프록시를 왜 사용해야할까? // 이 경우는 TEAM + MEMBER 둘다 필요. Member member = em.find(Member.class, memberId) Team team = member.getTeam(); system.out.println("회원 이름 : " + member.getUsername()); ststem.out.println("소속 팀 : " + team.getName()); // 이 경우는 회원만 필요함. Member member = em.find(Member.class, memberId); Team team = member.getTeam(); system.out.println("회원 이름 : " + member.getUsername()); Member와 Team의 연..
영속성 컨텍스트 영속성 컨텍스트는 '엔티티 영구 저장하는 환경'이라는 뜻으로 사용한다. 영속성 컨텍스트에 저장하는 em.persist(Object)는 사실 DB에 저장한다는 뜻이 아니다. em.persist(Object)를 하면 영속성 컨테스트에 객체가 영속화된다. 영속화는 영속성 컨텍스트에 저장된다는 것이다. 즉, Entity를 영속성 컨텍스트에 저장한다는 뜻이다. 코드로 좀 더 살펴본다. Member member = new Member(); member.setId(100L); System.out.println("BEFORE PERSIST"); em.persist(member); System.out.println("AFTER PERSIST"); tx.commit(); 위의 코드를 살펴본다. em.per..
이전 게시글에서 JPA 프로젝트를 생성했다. 프로젝트를 생성한 다음에 간단하게 실행하는 법을 보려고 한다. 이전 게시글은 아래 글을 클릭하면 확인할 수 있다. JPA, Maven으로 Project 생성하기 JPA, Maven으로 Project 생성하기 이번 포스팅에서는 JPA에서 Maven으로 Project를 생성하는 방법에 대해서 공부하고자 한다. 1. 인텔리제이에서 프로젝트를 생성하기 프로젝트 생성을 한 후, Maven에서 Project SDK를 선택해준다. 나는 JAV ojt90902.tistory.com JPA를 구동하기 위해 먼저 해야할 일 먼저 JPA를 구동하기 위해서는 EntityManagerFactory를 만들어야 한다. EntityManagerFactory는 EntityManager 객체..