Java
-
JPA - 2. 엔티티 매핑Java 2020. 7. 26. 14:32
객체와 테이블 매핑 @Entity - @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다. - JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 - 기본 생성자 필수 (파라미터가 없는 public 또는 protected) - final 클래스 , enum, interface, inner 클래스 사용 X - 저장할 필드에 final 사용 X @Entity 속성 name - JPA에서 사용할 엔티티 이름 지정 - default -> 클래스 이름 - 같은 클래스 이름이 없다면, 가급적 기본값을 사용한다. @Table 속성 - catalog : 데이터베이스 catalog 매핑 - schema : 데이터베이스 schema 매핑 - uniqueConstraints (DDL) : DDL 생성 시..
-
JPA - 1. 영속성 관리 - 내부 동작 방식Java 2020. 7. 26. 14:03
JPA에서 가장 중요한 2가지 1. 객체와 관계형 데이터베이스 매핑하기 2. 영속성 컨텍스트 영속성 컨텍스트 - JPA를 이해하는데 가장 중요한 언어 - "엔티티를 영구 저장하는 환경" 이라는 뜻 - EntityManager.persist(entity); 엔티티 매니저 ? 영속성 컨텍스트 ? - 영속성 컨텍스트는 논리적인 개념 - 눈에 보이지 않는다. - 엔티티 매니저를 통해서 영속성 컨텍스트에 접근 엔티티의 생명주기 - 비영속 (new/ transient) 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 - 영속 (managed) 영속성 컨텍스트에 관리되는 상태 - 준영속 (detached) 영속성 컨텍스트에 저장되었다가 분리된 상태 - 삭제 (removed) 삭제된 상태 영속성 컨텍스트의 이점 - 1..
-
JPA - 0. JPA 소개, DB 용어 정리Java 2020. 7. 26. 13:36
SQL 중심 개발의 문제점 - 객체를 관계형 DB에 관리 - SQL 중심적인 개발 - CRUD 의 무한 반복, 지루한 코드 - 패러다임의 불일치 : 객체 vs 관계형 데이터베이스 - 객체를 관계형 데이터베이스에 저장. 객체 -> SQL 변환 -> RDB(SQL) - 객체와 관계형 데이터베이스의 차이 1. 상속 2. 연관관계 3. 데이터 타입 4. 데이터 식별 방법 1. 객체의 경우 상속이 존재하지만 Table의 경우 상속이 존재하지 않고 비슷한 슈퍼타입 서브타입 관계가 존재한다. -> 자바 컬렉션을 예시로 설명 2. 객체는 참조를 사용, 테이블은 외래 키를 사용 -> 객체는 자유롭게 객체 그래프를 탐색할 수 있어야 한다. 결국 객체를 객체답게 모델링 할 수록 매핑 작업만 늘어난다. 객체를 자바 컬렉션에 ..
-
JPA - 4. 다양한 연관관계 매핑Java 2020. 7. 25. 18:16
연관관계 매핑시 고려사항 3가지 1. 다중성 2. 단방향, 양방향 3. 연관관계의 주인 1. 다중성 - 다대일 : @ManyToOne - 일대다 : @OneToMany - 일대일 : @OneToOne - 다대다 : @ManyToMany 2. 단방향, 양방향 - 테이블 - 외래키 하나로 양쪽 조인 가능 - 사실 방향이라는 개념이 없다. - 객체 - 참조용 필드가 있는 쪽으로만 참조 가능 - 한쪽만 참조하면 단방향 - 양쪽이 서로 참조하면 양방향 3. 연관관계의 주인 - 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음 - 객체 양방향 관계는 A -> B , B -> A 처럼 참조가 2군데 - 객체 양방향 관계는 참조가 2군데 있다. 둘 중 테이블의 외래 키를 관리할 곳을 지정해야 한다. - 연관관계의 ..
-
JPA - 3. 연관관계 매핑Java 2020. 7. 25. 17:33
- 연관관계가 필요한 이유 - 객체를 테이블에 맞추어 데이터 중심으로 모델링하면, 협력 관계를 만들 수 없다. - 테이블은 외래 키로 조인을 사용해서 연관된 테이블을 찾는다. - 객체는 참조를 사용해서 연관된 객체를 찾는다. - 테이블과 객체 사이에는 이런 큰 간격이 있다. - 객체 지향 모델링 / 단방향 연관관계 // Member.class @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; ... //조회 Member findMember = em.find(Member.class, member.getId()); //참조를 사용해서 연관관계 조회 Team findTeam = findMember.getTeam(); //팀 저장 Team team = n..
-
JPA - 6. 프록시와 연관관계 관리Java 2020. 7. 25. 16:48
프록시 프록시 기초 - em.find() vs em.getReference() - em.find() : 데이터베이스를 통해서 실제 엔티티 객체 조회 - em.getReference() : 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 프록시 특징 - 실제 클래스를 상속 받아서 만들어진다. - 실제 클래스와 겉 모양이 같다. - 사용하는 입장에서는 진짜 객체인지 프록시 객체인지 구분하지 않고 사용하면 된다. (이론상으로) - 프록시 객체는 실제 객체의 참조(target)을 보관한다. - 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드를 호출한다. - 프록시 객체는 처음 사용할 때 한 번만 초기화 - 프록시 객체를 초기화 할 때, 프록시 객체가 실제 엔티티로 바뀌는 것은 아님. 초기화 ..
-
JPA - 5. 상속관계 매핑Java 2020. 7. 25. 14:11
상속관계 매핑 - 관계형 데이터베이스는 상속 관계 X - 슈퍼타입 서브타입 관계라는 모델링 기법이 객체의 상속과 유사하다. - 상속관계 매핑이란 객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 매핑하는 것이다. 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 1. 각각 테이블로 변환하는 : 조인 전략 2. 통합 테이블로 변환하는 : 단일 테이블 전략 3. 서브타입 테이블로 변환하는 : 구현 클래스마다 테이블을 구현하는 전략 주요 애노테이션 1. @Inheritance(strategy = InheritanceType.XXX) - JOINED : 조인전략 - SINGLE_TABLE : 단일 테이블 전략 - TABLE_PER_CLASS : 구현 클래스마다 테이블 전략 2. @Discrimin..
-
java - 6) 클래스Java 2020. 7. 20. 22:48
- 클래스의 개념 - 객체 지향 프로그래밍 (OOP, Object-Oriented Programming) 객체 지향 프로그래밍에서는 모든 데이터를 객체(object)로 취급하며, 이러한 객체가 바로 프로그램의 중심이 된다. 객체란 간단히 이야기 하자면 실생활에서 우리가 인식할 수 있는 사물로 설명할 수 있다. 이러한 객체의 상태(status) 와 행동(behavior)을 구체화하는 형태의 프로그래밍이 바로 객체 지향 프로그래밍이다. 이때 객체를 만들어 내기 위한 설계도와 같은 개념을 클래스(class)라고 한다. - 클래스 (class) 자바에서 클래스란 객체를 정의하는 틀 또는 설계도와 같은 의미로 사용된다. 자바에서는 이러한 설계도인 클래스를 가지고, 여러 객체를 생성하여 사용하게 된다. 클래스는 객..