1. 상속관계 매핑 객체와 달리 데이터베이스는 상속이라는 관계가 없다. 대신 슈퍼타입-서브타입이라는 모델링 기법이 상속과 유사하다. 그렇다면 객체의 상속관계를 테이블에 어떻게 적용할 수 있을까..? 1) 조인 전략(각각의 테이블로 변환) 각각의 엔티티에 해당하는 테이블을 모두 만들고 자식 테이블은 부모 테이블의 PK를 받아 PK + FK로 사용하는 전략이다. Item(부모) 테이블의 컬럼은 ITEM_ID, NAME, PRICE, DTYPE Album(자식) 테이블의 컬럼은 ITEM_ID, ARTIST 객체는 타입으로 구분이 가능하지만 테이블은 타입의 개념이 없기 때문에 타입을 구분하는 컬럼을 추가해 사용해야 한다. 장점 테이블의 정규화 외래키 참조 무결성 제약조건을 사용할 수 있다. 저장 공간을 효율적으..
양방향 연관관계는 단방향 연관관계가 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..
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; } 테이블은 외래키를 이용하여 조인을 통해서 연관된 테이블을 찾는 반..
1. 데이터베이스 스키마 생성 애플리케이션 실행 시점에 DDL 자동 생성한다. hibernate.hbm2ddl.auto create : 기존 생성되어 있던 테이블 삭제 후 다시 생성한다.(drop -> create) create-drop : 애플리케이션 종료 시점에 테이블 삭제한다.(drop -> create -> drop) update : 테이블 변동 되는 부분만 반영된다. validate : 엔티티와 테이블의 매핑이 정상적인지만 확인한다.(엔티티와 매핑정보가 일치하지 않는 경우 애플리케이션을 실행하지 않는다.) create, create-drop, update는 운영 서버에서는 절대 사용하면 안된다. 여러 명이 같이 사용하는 개발, 테스트 서버에서도 가급적 사용하지 않는 것이 좋다.(사용한다면 val..
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..
1. EntityMangerFactory 생성 EntityMangerFactory는 애플리케이션이 실행될 때 딱 한 번만 생성되어야 하고 이를 공유하여 사용해야 한다. 2. EntityManger 생성 애플리케이션 실행 이후에는 매 트랜잭션마다 EntityMangerFatory에서 EntityManager를 생성하여 사용한다. EntityManger를 통해 데이터베이스에 조회/등록/수정/삭제의 기능을 수행할 수 있다. JPA에서 트랜잭션이라는 단위는 굉장히 중요한데, 데이터가 변경되는 작업은 반드시 트랜잭션 내에서 수행되어야 한다. 3. 종료 사용이 끝난 후에는 EntityManager와 EntityMangerFactory는 반드시 종료해줘야 한다. // 1. EntityManagerFactory 생성 ..
라이브러리 추가 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..