JPA/기본

JPA/기본

고급 매핑(1) - 상속관계 매핑

1. 상속관계 매핑 객체와 달리 데이터베이스는 상속이라는 관계가 없다. 대신 슈퍼타입-서브타입이라는 모델링 기법이 상속과 유사하다. 그렇다면 객체의 상속관계를 테이블에 어떻게 적용할 수 있을까..? 1) 조인 전략(각각의 테이블로 변환) 각각의 엔티티에 해당하는 테이블을 모두 만들고 자식 테이블은 부모 테이블의 PK를 받아 PK + FK로 사용하는 전략이다. Item(부모) 테이블의 컬럼은 ITEM_ID, NAME, PRICE, DTYPE Album(자식) 테이블의 컬럼은 ITEM_ID, ARTIST 객체는 타입으로 구분이 가능하지만 테이블은 타입의 개념이 없기 때문에 타입을 구분하는 컬럼을 추가해 사용해야 한다. 장점 테이블의 정규화 외래키 참조 무결성 제약조건을 사용할 수 있다. 저장 공간을 효율적으..

JPA/기본

다양한 연관관계 매핑

양방향 연관관계는 단방향 연관관계가 2개인 것이다. 연관관계 주인 : 외래 키를 관리하는 참조 연관관계 주인의 반대편 : 외래 키에 영향을 주지 않고 단순 조회만 가능 1. 다대일(N:1) 관계형 데이터베이스에서는 항상 N쪽에 외래 키가 들어가야 맞는 설계이다. 가장 많이 사용하는 연관관계 매핑이다. @Entity class Owner{ @Id @Column("OWNER_ID) private Long id; private String name; private int age; // 양방향 연관관계 매핑 시 @OneToMany(mappedby = "owner") private List ownHouseList = new ArrayList(); } @Entity class House{ @Id @Generated..

JPA/기본

단방향, 양방향 연관관계

1. JPA를 사용하지 않고 마이바티스 등을 사용하는 경우 객체를 테이블에 맞춰서 모델링 하는 경우 객체의 참조가 아니라 외래키를 그대로 사용하는 경우 Item(itemId, categoryId, itemName, stockQuantity ...) - Category(categoryId, name) public class Item{ private Long id; private String name; private Long categoryId; private int stockQuantity; ... } public class Category{ private Long categoryId; private String categoryName; } 테이블은 외래키를 이용하여 조인을 통해서 연관된 테이블을 찾는 반..

JPA/기본

엔티티 매핑

1. 데이터베이스 스키마 생성 애플리케이션 실행 시점에 DDL 자동 생성한다. hibernate.hbm2ddl.auto create : 기존 생성되어 있던 테이블 삭제 후 다시 생성한다.(drop -> create) create-drop : 애플리케이션 종료 시점에 테이블 삭제한다.(drop -> create -> drop) update : 테이블 변동 되는 부분만 반영된다. validate : 엔티티와 테이블의 매핑이 정상적인지만 확인한다.(엔티티와 매핑정보가 일치하지 않는 경우 애플리케이션을 실행하지 않는다.) create, create-drop, update는 운영 서버에서는 절대 사용하면 안된다. 여러 명이 같이 사용하는 개발, 테스트 서버에서도 가급적 사용하지 않는 것이 좋다.(사용한다면 val..

JPA/기본

영속성 관리

1. 영속성 컨텍스트(persistence context)란 엔티티를 영구 저장하는 환경(EntityManager) 2. 엔티티의 4가지 상태 1) 비영속(new/transient) : 영속성 컨텍스트와 전혀 관계가 없는 상태 // 그냥 자바 코드 User user = new User(); user.setId(1L); user.setUserId("hyunbenny"); user.setName("ben"); 2) 영속(managed) : 영속성 컨텍스트에 '저장'된 상태 EntityManager(em)을 통해서 영속성 컨텍스트에 '저장되어 관리'되는 상태를 말한다. em.persist(user); // or em.find(User.class, 1L); 3) 준영속(detache..

JPA/기본

JPA 사용하기

1. EntityMangerFactory 생성 EntityMangerFactory는 애플리케이션이 실행될 때 딱 한 번만 생성되어야 하고 이를 공유하여 사용해야 한다. 2. EntityManger 생성 애플리케이션 실행 이후에는 매 트랜잭션마다 EntityMangerFatory에서 EntityManager를 생성하여 사용한다. EntityManger를 통해 데이터베이스에 조회/등록/수정/삭제의 기능을 수행할 수 있다. JPA에서 트랜잭션이라는 단위는 굉장히 중요한데, 데이터가 변경되는 작업은 반드시 트랜잭션 내에서 수행되어야 한다. 3. 종료 사용이 끝난 후에는 EntityManager와 EntityMangerFactory는 반드시 종료해줘야 한다. // 1. EntityManagerFactory 생성 ..

JPA/기본

기본 세팅

라이브러리 추가 pom.xml org.hibernate hibernate-entitymanager 5.3.10.Final com.h2database h2 1.4.200 javax.xml.bind jaxb-api 2.3.0 org.projectlombok lombok 1.18.24 JPA 설정 persistence.xml JPA는 Persistence클래스부터 시작하게 되는데 JPA 설정파일(persistence.xml)을 읽어서 EntityMangerFactory 클래스를 생성한 후 필요할 때마다 EntityManger를 생성해서 사용한다. JPA 설정파일의 위치는 META-INF 하위에 둬야 한다. (maven프로젝트의 예 : /src/main/resources/META-INF) 설정파일의 persis..

github.com/hyunbenny/study
'JPA/기본' 카테고리의 글 목록