1. 양방향 연관관계 엔티티들은 대부분 다른 엔티티와 연관관계가 있다. 회원은 팀에 소속될 수 있기 때문에 회원 엔티티와 팀 엔티티에 관계를 맺어야 한다. 이 부분은 JPA가 생겨난 이유와 패러다임의 불일치 포스팅에서 자세히 나와있다. 참고하자. 간단하게 다시 말하자면 객체는 참조를 사용해서 관계를 맺고 테이블은 외래 키를 사용해서 관계를 맺는다. 객체와 테이블이 관계를 맺을 때 완전히 다르게 맺는 것이다. 그래서 우리는 객체의 참조와 테이블의 외래 키를 매핑하는 것이 이 장의 목표이다. 회원과 팀을 양방향 관계로 매핑해보자. //매핑한 회원 엔티티 @Entity public class Member { @Id @Column(name = "member_id") private String id; privat..
1. 패러다임의 불일치란 ? 객체와 관계형 데이터베이스가 지향하는 목적이 서로 다름으로 인해 둘의 기능과 표현 방법이 다른 것을 말한다. 기능과 표현 방법이 다르다는게 무슨 말일까 ? 2. 객체모델과 관계형 데이터베이스 모델은 지향하는 패러다임이 서로 다르다. 애플리케이션은 발전하면서 그 내부의 복잡성도 점점 커진다. 이 복잡성을 제어할 수 있는 장치가 바로 객체지향 프로그래밍이다. 도메인 모델을 정의할 때도 객체지향적으로 개발하면 객체지향 언어가 가진 장점들을 활용할 수 있다. 문제는 객체지향적으로 정의한 도메인 모델을 저장할 때 발생한다. 단순히 객체를 저장하는 일이라면 문제가 발생하지 않겠지만, 실무에선 단순히 객체만을 저장하는 일은 거의 없을 것이다. 예를 들어, 사용자가 회원가입을 하면 회원이라..
옛날에 에플리케이션을 개발하는 법 애플리케이션을 개발하면 관계형 데이터베이스를 데이터 저장소로 사용하면서 오랫동안 SQL을 다룬다. 몇 년 전에는 개발자들이 JDBC API를 직접 사용해서 SQL문을 작성해가며 개발을 해왔다. 그러다 보니 애플리케이션의 비즈니스 로직보다 SQL문과 JDBC API를 작성하는 데 더 많은 시간을 보내게 된 것이다. 시간이 지나고 아이바티스(마이바티스), Jdbc Template 등을 SQL 매퍼라 불리는데, SQL 매퍼를 통해 JDBC API 사용 코드를 줄일 수 있었다. 하지만 등록, 조회, 수정, 삭제(CRUD)용 SQL은 여전히 반복해서 작성해야 했다. 반복, 반복, 반복! 자바로 개발하는 애플리케이션은 관계형 데이터베이스를 데이터 저장소로 사용한다. 데이터베이스에 ..
이 부분은 영속성 컨텍스트에 관한 글을 보고 오면 더 이해가 가기 쉽다. 영속성 컨텍스트는 엔티티를 식별자 값으로 구분하므로 엔티티를 영속 상태로 만들려면 식별자 값이 반드시 있어야 한다. 식별자를 할당하는 다양한 전략이 있다. 그 중 많이 쓰는 2가지 전략을 알아보겠다. 1. 기본키 직접 할당 전략 기본 키를 직접 할당하려면 @Id로 매핑시키면 된다. @Id @Column(name="id") private String id; 직접 할당하는 방법은 em.persist() 로 엔티티를 저장하기 전에 에플리케이션에서 기본 키를 직접 할당하는 방법이다. Member member = new Member(); member.setAge(18); //직접 할당 em.persist(board); 2. IDENTITY ..
1. 영속성 컨텍스트 란 ? 눈에 보이지 않는 논리적인 개념 EntityManager을 사용하여 DB에 바로 접근하는 것이 아닌, 영속성 컨텍스트에 접근하여 저장, 삭제 등 가능 2. 엔티티의 생명주기 비영속: 객체가 영속성 컨텍스트와 관련이 없는 상태 public void data() { Member member = new Member(); } 영속: 객체가 영속성 컨텍스트에 의해 관리되고 있는 상태. 아래와 같이 EntityManager을 통해 저장시킨 상태 @PersistenceContext //Entity를 영구저장하는 환경을 만듬 private EntityManager em; //EntityManager 선언 public void data() { Member member = new Member(..
JPA를 사용하는데 있어서 가장 중요한 것은 엔티티와 테이블을 정확히 매핑시키는 것이다. 따라서 매핑 어노테이션을 잘 숙지하고 사용할 수 있어야 한다. 다양한 매핑 어노테이션을 지원하는데, 크게 4가지로 분류할 수 있다. 객체와 테이블 매핑: @Entity, @Table 기본 키 매핑: @Id 필드와 컬럼 매핑: @Column 연관관계 매핑: @ManyToOne, @JoinColumn 1. @Entity @Entity가 붙은 클래스는 JPA가 관리하는 것으로, 엔티티라 부른다. 속성 기능 기본값 name JPA에서 사용할 엔티티 이름을 지정한다. 보통 기본값인 클래스 이름을 사용한다. 설정하지 않으면 클래스 이름을 그대로 사용한다. 1-1 @Entity 적용 시 주의해야할 사항 기본 생성자는 필수다.(예..
1. Entity간의 연관관계(방향) 이란? DB에서는 관계를 맺어주기만 하면 양방향 참조가 가능하다. 하지만 객체(Entity)간의 클래스는 참조방향을 지정해줘야 한다. 어떤 방향성을 고려해야하는건 굉장히 중요하다. 2. 방향을 가져야하는 이유 객체지향적인 관점에서 A클래스와 B클래스가 연관관계일때, A클래스는 B클래스를 사용하게되고 이런 경우에 방향성을 갖게 된다. 하지만 방향성을 남발하면 성능에 문제가 갈 수 있다. 예시로, 게시판을 구현하고 한 명의 사용자가 수십개의 게시판의 글을 작성했고, 회원클래스가 게시판클래스의 방향을 갖는 경우 회원의 게시판을 불러 오면 DB에 무리가 갈 수 있다. (그래서 다른 방법으로 Repository 페이징 기능을 구현한다.) 그래서 가능한 단방향으로 구현 → 양방..
- Total
- Today
- Yesterday