JPA
-
[JPA] 연관관계 - 2 다양한 매핑JPA 2020. 7. 1. 23:17
참고 : JPA 프로그래밍 / 김영한 단방향, 양방향 : 객체 관계에서 한 쪽만 참조하는 것을 단방향, 양족이 서로 참조하는 것을 양방향 관계라 한다. 연관관계 주인 : 데이터베이스는 외래 키 하나로 두 테이블이 연관관계를 맺는다. 반면에 엔티티를 양방향으로 매핑하면 A -> B, B -> A 2곳에[서 서로를 참조한다. 따라서 객체의 연관관계를 관리하는 포인트는 2곳이다. JPA는 두 객체 연관관계 중 하나를 정해서 데이터베이스 외래 키를 관리하는데 이것을 연관관계의 주인이라 한다. 외래키를 가진 테이블과 매핑한 엔티티가 외래키를 관리하는게 효율적이므로 이곳을 연관관계의 주인 이라 한다. 주인이 아닌 방향은 외래 키를 변경할 수 없고 읽기만 가능하다. 연관관계의 주인은 mappedBy 속성을 하용하지 ..
-
[JPA] 연관관계 - 1JPA 2020. 6. 29. 14:58
참고 : JPA 프로그래밍 / 김영한 객체 연관관계 vs 테이블 연관관계 - 객체는 참조로 연관관계를 맺는다. : 객체를 양방향으로 참조하려면 단방향 연관관계를 2개 만들어야 한다. - 테이블은 외래 키로 연관관계를 맺는다. ex) - 객체 class A { B b; } Class B { A a; } A a = new A(); B b = new B(); a.setB(b); b.setA(a); a.getB().get.. b.getA().get... - 테이블 Select B.* from A JOIN B ON A.pk = B.fk Select A.* from B JOIN A ON B.pk = A.fk 객체 관계 매핑 @Entity public class Member{ @Id @Colmun(name = "ME..
-
[JPA] 영속성 컨텍스트JPA 2020. 6. 28. 18:25
참고 : JPA 프로그래밍 / 김영한 영속석 컨텍스트 특징 영속성 컨텍스트와 식별자 값 ? : 영속성 컨텍스트는 엔티티를 식별자 값(@Id)로 구분한다. 따라서 영속 상태는 식별자 값이 반드시 있어야 한다. 영속성 컨텍스트와 데이터베이스 저장 ? : JPA는 보통 트랜잭션을 커밋하는 순간 영속성 컨텍스트에 새로 저장된 엔티티를 데이터베이스에 반영하는데 이것을 "플러시"라 한다. [장점 및 특징] - 1차 캐시 - 동일성 보장 - 트랜잭션을 지원하는 쓰기 지연 - 변경 감지 - 지연 로딩 1차 캐시 ? : 영속성 컨텍스트는 내부에 캐시를 가지고 있는데, 이것을 1차 캐시라 한다. 영속 상태의 엔티티는 모두 이곳에 저장된다. 쉽게 이야기 하면 영속성 컨텍스트 내부에 Map이 하나 있는데 키는 @Id로 매핑한..
-
[JPA] 엔티니 매니저JPA 2020. 6. 28. 17:44
참고 : JPA 프로그래밍 / 김영한 엔티티 매니저 생성 과정 1. 엔티티 매니저 팩토리 생성 : JPA를 시작하려면 우선 persistence.xml의 설정 정보를 사용해서 엔티티 매니저 팩토리를 생성해야 한다. 이때 Persistence 클래스를 사용하는데 이 클래스는 "엔티티 매니저 팩토리"를 생성해서 JPA를 사용할 수 있게 준비한다. EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook"); META-INF/persistence.xml에서 이름이 jpabook인 영속성 유닛을 찾아서 엔티티 매니저 팩토리를 생성한다. * "JPA 구현체에 따라서는 데이터베이스 커넥션 풀도 생성하므로 엔티티 매니저 팩토리를 생성하는 비..
-
[JPA] 엔티티 매핑JPA 2020. 4. 6. 15:31
@Entity : 테이블과 매핑할 클래스는 @Entity 어노테이션을 필수로 붙여야 한다. 기본 생성자 필수 final 클래스, enum, interface, inner 클래스 사용 할 수 없다. 저장할 필드에 final을 사용하면 안되다. @Table : 엔티티와 매핑할 테이블을 지정. (생략하면 매핑한 엔티티 이름을 테이블 이름으로 사용) 옵션 name : 매핑할 테이블 이름 catalog : catalog 매핑 schema : 데이터베이스에서 schema를 매핑 uniqueconstraints : DDL 생성 시에 유니크 제약조건을 만든다. 필드와 컬럼 매핑 @ Column : 컬럼을 매핑한다. nullable(DDL) : null 값의 허용 여부를 설정. false로 설정하면 DDL 생성 시에 n..
-
[JPA] 프로그래밍 : 엔티티 상태JPA 2020. 4. 3. 17:01
영속성 컨텍스트 영속성 컨텍스트 ? 엔티티를 영구 저장하는 환경 - 엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다. > 영속성 컨텍스트는 애플리케이션과 데이터베이스 그 사이에 객체를 보관하는 가상의 데이터베이와 같은 역할. 1차 캐시, 동일성 보장, 트랜잭션 지원하는 쓰기 지연, 변경 감지, 지연로딩 등 기능을 사용 장점 ? 엔티티 조회 : 영속성 컨텍스트는 내부에 캐시를 가지고 있는데, 이것을 1차 캐시라 한다. 영속 상태의 엔티티는 모두 이곳에 저장된다. -> 영속 된 엔티티는 엔티티 매니저에서 persist() 메소드 호출 뿐 아니라, 데이터베이스에서 조회 한 엔티티 또한 영속화 (1차 캐시에 저장) -> 데이터베이스에 직접 접근하지 않고 ..
-
[JPA] 프로그래밍 : 1대다 맵핑JPA 2020. 4. 3. 15:51
연관 관계 회원과 팀 회원은 하나의 팀에만 소속 회원가 팀은 다대 일 관계 관계에는 항상 두 엔티티가 존재 한다. 둘 중 하나는 관계의 주인(owning) 다른 쪽은 종속된 쪽 (non-owning) 단반향 관계에서는 관계를 정의한 쪽(레퍼런스를 가지고 있는 쪽)이 주인 관계의 주인에 매핑정보를 삽입해야 한다. 양방향 관계에서는 @ManyToOne을 설정한 쪽이 주인 @onToMaynay(mappedBy) 단방향과 마찬가지로 관계의 주인에게 매핑 관계를 설정해야 DB에 반영 단방향 관계 ( N : 1 ) @Entity public class Account{ @Id @GeneratedValue private Long id; private String userName; } @Entity public clas..
-
[JPA] 프로그래밍 : 엔티티JPA 2020. 4. 2. 14:09
@Entity "객체" 세상에서 부르는 이름 클래스와 동일한 이름이 기본 값 (사용자가 이름을 정의 할 수 있음) 해당 클래스를 테이블과 매핑한다고 JPA 알림 @Table "릴레이션" 세상에서 부르는 이름 @Entity의 이름이 기본 값 (사용자가 이름을 정의 할 수 있음) 테이블 이름은 SQL에 사용 Entity Class에 매핑할 테이블 정보 @Id 엔티티의 주키를 맵핑할 때 사용 @GeneratedValue 주키의 생성 방법을 매핑하는 애노테이션 생성 전략과 생성기를 설정 (SEQUENCE, IDENTITY 등..) @Column 모든 Entity의 멤버 변수에는 @Column 어노테이션이 자동 적용 unique nullable length ... @Transient 컬럼으로 맵핑하고 싶지 않은 ..