본 글은 김영한님의 [인프런 - 자바 ORM 표준 JPA 프로그래밍 - 기본편] 강의와 자바 ORM 표준 JPA 프로그래밍 책을 기반으로 정리해 작성하였습니다. 1. 프록시 엔티티를 조회할 때 연관된 엔티티들이 항상 사용되는 것은 아니다. 예를 들어 내가 레알 마드리드라는 축구 클럽의 스카우터이고 손흥민 선수에 대한 정보를 얻고 싶을 때, 단순히 그 선수의 신체적 데이터만 알고 싶다면 굳이 선수가 소속된 팀의 정보까지 알 필요는 없다는 것이다. (잉크가 아까울수도) 아래 코드와 함께 살펴보자. 1) 선수 엔티티 @Entity public class Player { @Id @GeneratedValue private Long id; private Double height; private Double weig..
JPA
본 글은 김영한님의 [인프런 - 자바 ORM 표준 JPA 프로그래밍 - 기본편] 강의와 자바 ORM 표준 JPA 프로그래밍 책을 기반으로 정리해 작성하였습니다. 오늘은 실무에서 보통 쓰지 말라고하는 일대다(연관관계 주인을 일로 설정한 경우), 다대다 관계에 반항하는 말안듣는 잼민이들을 위한 필독 지침서이다. (사실 필자도 포함...) 이 포스팅에서는 일대다, 다대다 관계에 대해 살펴볼 것이고 단점들도 같이 알아볼 예정이다. 글을 읽으시면서 이것들을 그냥 무지성으로 쓰지 않는 것보단 이들이 어떤 문제를 갖고 있는지 알고 쓰지 않는 현명한 개발자가 되었으면 좋겠다. 1. 일대다 일대다 관계는 다대일 관계의 반대 방향으로 "일"이 연관관계의 주인이 된다. (앞을 연관관계의 주인이라고 생각하자) "일"에서는 엔..
본 글은 김영한님의 [인프런 - 자바 ORM 표준 JPA 프로그래밍 - 기본편] 강의와 자바 ORM 표준 JPA 프로그래밍 책을 기반으로 정리해 작성하였습니다. 오늘은 JPA를 배우면서 정말 중요한 연관관계 매핑, 그리고 더 중요한 연관관계의 주인 설정에 관해 알아볼 것이다. 먼저 연관관계 매핑에 대해 공부하는 이유를 한 문장으로 설명하자면 다음과 같다. (필자의 생각) 객체에다가 테이블처럼 외래 키를 저장해두면 협력 관계를 가질 수 없기 때문에 객체의 참조와 테이블의 외래 키를 매핑하는 것이 필요하다. 단순히 정리하면, 객체에는 외래 키를 저장하지 않을 것이고, 객체의 참조와 테이블의 외래키를 매핑할 것이다. 이 부분은 JPA에서 매우 어려운 부분에 해당하고 아래에서는 강조한 위 문장이 무슨 뜻인지,..
본 글은 김영한님의 [인프런 - 자바 ORM 표준 JPA 프로그래밍 - 기본편] 강의와 자바 ORM 표준 JPA 프로그래밍 책을 기반으로 정리해 작성하였습니다. 오늘은 JPA를 사용하면서 가장 기본적이고 중요한 일중 하나인 엔티티와 테이블 매핑, 기본 키(PK) 매핑, 필드와 컬럼 매핑에 대해서 알아볼 것이다. 1. @Entity JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 를 필수로 붙여야 한다. @Entity가 붙은 클래스는 JPA가 관리하는 것으로, 엔티티라 부른다. @Entity public class suhwanc { private int age; } @Entity를 사용할 때는 주의할 점이 몇 가지 있다. 기본 생성자가 필수이다(파라미터가 없는 public or protected ..
본 글은 김영한님의 [인프런 - 자바 ORM 표준 JPA 프로그래밍 - 기본편] 강의와 자바 ORM 표준 JPA 프로그래밍 책을 기반으로 정리해 작성하였습니다. JPA의 역할은 크게 엔티티와 테이블을 매핑하는 부분, 매핑한 엔티티를 실제 사용하는 부분으로 나눌 수 있다. 오늘은 엔티티 매니저(Entity Manager)가 어떤 역할을 하고, 어떻게 사용하는지 알아보자. 1. 엔티티 매니저 팩토리와 엔티티 매니저 데이터베이스를 하나만 사용하는 애플리케이션은 일반적으로 EntityManager Factory를 하나만 생성한다. 다음은 생성 코드이다. EntityManagerFactory emf = Persistence.createEntityManagerFactory("suhwan"); 여기 Persisten..
본 글은 김영한님의 [인프런 - 자바 ORM 표준 JPA 프로그래밍 - 기본편] 강의와 자바 ORM 표준 JPA 프로그래밍 책을 기반으로 정리해 작성하였습니다. 이번 장에서는 원래 스프링 프로젝트 생성, 메이븐, h2 Database 설정 등을 해야 하는데, 이런 부분은 사용자나 하고 싶은 프로젝트마다 다를 수 있기 때문에 포스팅에서는 생략하고 간단한 어노테이션이나 엔티티 매니저 같은 기본적인 부분을 알아보고 넘어가도록 하겠다. 1. 객체 매핑 시작 JPA를 사용하려면 가장 먼저 테이블들을 매핑해야 한다. 1일차에서 살펴본 멤버 테이블을 매핑해보자. package hellojpa; import javax.persistence.*; @Entity @Table(name = "MEMBER") public cl..
본 글은 김영한님의 [인프런 - 자바 ORM 표준 JPA 프로그래밍 - 기본편] 강의와 자바 ORM 표준 JPA 프로그래밍 책을 기반으로 정리해 작성하였습니다. 0. 소개 과거 주로 자바로 애플리케이션을 개발하고 관계형 데이터베이스(이하 RDB)를 데이터 저장소로 사용하던 개발자들은 객체지향의 장점을 포기하고 객체를 단순히 테이블에 맞추어 데이터 전달 역할만 하도록 개발하는 경우가 많았다. 쉽게말해 객체지향의 장점 중 하나로 잘 설계된 독립적인 클래스를 재사용하고, 상속할 수 있다는 장점이 있는데, 객체를 RDB에 적용시키려 할 때는 일일히 CRUD(등록, 수정, 삭제, 조회) 용 SQL을 반복해서 작성해야했고, 상속 관계의 경우 부모, 자식 클래스에 대한 SQL문을 각각 작성해야 한다는 문제점이 발생했..