본문 바로가기

강의/자바 ORM 표준 JPA

(9)
단방향 연관관계, 양방향 연관관계 단방향 연관관계, 양방향 연관관계 뭔지는 알겠는데, 막상 스키마를 구성하려면 개념이 안 잡히는 알 것 같으면서, 또 모르는 그런 개념이어서 이번 기회에 정리를 해보려고 합니다. 1. 데이터 베이스 형태의 설계 테이블 연관관계에 나타나 있는 형태 그대로 엔티티를 구성해 보도록 하겠습니다. 아래와 같이 두개의 엔티티를 생성할 수 있습니다. @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; @Column(name = "TEAM_ID") private Long teamId; } @Entity public class Team { @Id @GeneratedVal..
필드와 컬럼 매핑 @Entity public class Member { @Id private Long id; @Column(name = "name") private String username; private Integer age; @Enumerated(EnumType.STRING) private RoleType roleType; @Lob private String description; //Getter, Setter… @Transient private Long temp; } 어노테이션 설명 @Column 컬럼 매핑, db 컬럼의 이름을 변경할 수 있다. @Enumerated(EnumType.STRING) enum 타입 매핑 EnumType.ORDINAL이 default이지만 사용하지 않는다. EnumType.ORDINA..
데이터 스키마 자동 생성 데이터베이스 스키마 자동 생성 DDL을 애플리케이션 실행 시점에 자동 생성 데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL 생성 운영 시점에는 사용하지 않고, 개발할 때 만 사용하길 권장하는 옵션이다. spring.jpa.hibernate.ddl-auto=update create 기존 테이블 삭제 후 다시 생성 create-drop create와 같으나 종료 시점에 테이블 drop (테스트 케이스 확인하고 종료할 때 깔끔하게 없애고 싶을 때) update 변경분만 반영 (운영DB에는 사용하면 안됨) validate 엔티티와 테이블이 정상 매핑되었는지만 확인 none 사용하지 않음 운영 장비에서는 절대 create, create-drop, update 사용하면 안된다. 개발 초기 단계에는 c..
JPA, 영속성 컨텍스트의 이점 (변경감지) 영속성 컨텍스트의 이점 앞서 영속성 컨텍스트의 이점은 5가지가 존재한다고 하였습니다. • 1차 캐시 • 동일성(identity) 보장 • 트랜잭션을 지원하는 쓰기 지연 (transactional write-behind) • 변경 감지(Dirty Checking) • 지연 로딩(Lazy Loading) 영속성 컨텍스트 부분에는 변경 감지를 할 수 있다. 우선 코드로 한번 확인해보자. 다음은 update하는 부분을 살펴볼 것이다. 이미 database에 저장되어 있는 member를 찾고, 해당 member의 id 값을 수정하는 명령어이다. package hellojpa; import javax.persistence.EntityManager; import javax.persistence.EntityManage..
JPA, 영속성 컨텍스트의 이점 (트랜잭션을 지원하는 쓰기 지연) 영속성 컨텍스트를 사용하면 5가지의 이점을 얻을 수 있다. • 1차 캐시 • 동일성(identity) 보장 • 트랜잭션을 지원하는 쓰기 지연 (transactional write-behind) • 변경 감지(Dirty Checking) • 지연 로딩(Lazy Loading) 1차 캐시에서 설명했던 것과 유사한 부분이다. 트랜잭션을 지원하는 쓰기 지연이란 알기 쉽게 말해서 query는 commit하는 시점에 날린다는 것이다. memberA와 memberB를 1차 캐시에 저장하는 persist 명령어를 사용하면, 쓰기 지연 SQL 저장소에 query문을 임시로 저장한다. commit 하는 시점에 쓰기 지연 SQL 저장소에 저장되어 있는 query들을 날려버린다. commit 하는 시점에 query를 모아서 ..
JPA, 영속성 컨텍스트의 이점 (영속 엔티티의 동일성 보장) 영속성 컨텍스트의 이점 앞서 영속성 컨텍스트의 이점은 5가지가 존재한다고 하였습니다. • 1차 캐시 • 동일성(identity) 보장 • 트랜잭션을 지원하는 쓰기 지연 (transactional write-behind) • 변경 감지(Dirty Checking) • 지연 로딩(Lazy Loading) 이번에는 영속성 컨텍스트의 두번째 이점인 동일성 보장에 대해 알아보도록 하겠습니다. 동일성 보장 java 컬렉션에서 값을 가져 올때 동일한 주소 값을 가져오듯이, 같은 reference를 불러오면 동일성을 보장해줍니다. 이는 1차 캐시가 존재하기 때문에 가능한 것입니다. 코드를 먼저 살펴보도록 하겠습니다. package hellojpa; import javax.persistence.EntityManager;..
JPA, 영속성 컨텍스트의 이점 (1차 캐시) 영속성 컨텍스트에 대해서 명확하게 알게되면 JPA가 내부적으로 어떻게 돌아가는지 알 수 있다. 앞서 영속성 컨텍스트는 EntityManager을 이용할 수 있는 공간이라고 하였다. 영속성 컨텍스트를 사용하면 5가지의 이점을 얻을 수 있다. • 1차 캐시 • 동일성(identity) 보장 • 트랜잭션을 지원하는 쓰기 지연 (transactional write-behind) • 변경 감지(Dirty Checking) • 지연 로딩(Lazy Loading) 1차 캐시 ( db 조회 횟수를 줄일 수 있다) jpa 영속성 컨텍스트는 어플리케이션과 database 사이에 존재한다. 중간에 존재하면서 얻는 이점 중 한가지인 1차 캐시에 대해 알아보자. 캐시라는 말에서 알 수 있듯이 데이터의 정보를 잠시 저장하고 있는..
영속성 컨텍스트 영속성 컨텍스트 영속성 컨텍스트는 JPA를 이해하는데 가장 중요한 용어다. 영속성 컨텍스트에 대해서 명확하게 알게되면 JPA가 내부적으로 어떻게 돌아가는지 알 수 있다. JPA를 쓰게되면 EntityManagerFactory와 EntityManager에 대해서 먼저 알아봐야 한다. 고객의 요청이 올 때마다 EntityManagerFactory를 이용하여 EntityManager를 생성하는데, EntityManager는 내부적으로 데이터 베이스 커넥션을 사용해서 db를 사용하게 된다. 그렇다면 영속성 컨텍스트는 무엇인가? 영속성 컨텍스트는 "엔티티를 영구 저장하는 환경" 이라는 뜻으로 EntityManager.persist(entity) 라는 명령어를 통해서 영속성 컨텍스트에 entity를 저장한다. (d..