JPA 데이터 타입 분류 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적이 가능하다. 값 타입 단순히 값으로 사용하는 자바 기본 타입이나 객체 별도의 식별자(id)가 없고 값만 존재하므로 변경시 추적이 불가하다. 값 타입 분류 기본 값 타입 원시타입(int, boolean..), 래핑 타입(String, Integer..) 생명주기를 엔티티에 의존한다. 회원을 삭제하면 이름, 나이 필드도 함께 삭제된다. 값 타입은 공유하면 안된다. 회원 이름 변경 시 다른 회원의 이름도 함께 변경되면 안된다. → 불변 객체로 만들어야 함. 그렇기 때문에 자바의 기본 타입은 항상 값을 복사하는 특징이 있다. 래퍼 클래스는 기본 타입이 아니지만 특수한 케이스로 변경할 수 없다. 임베디드 타..
개요 JPA가 사용하는 프록시와 지연로딩, 즉시로딩에 대하여 알아보고 영속성 전이에 대한 개념과 영속성 전이를 이용해 고아객체를 제거하는 방법에 대하여 이해한다. 프록시 엔티티가 실제 사용될 때까지 데이터베이스 조회를 지연하는 방법을 지연로딩 이라하고 이때 실제 엔티티 객체 대신 데이터베이스 조회를 지연할 수 있는 가짜 객체가 필요한데 이것을 프록시 객체라 한다. @Getter @Setter @Entity public class Game { @Id @GeneratedValue private Long id; private String name; } Game game = new Game(); game.setName("game"); em.persist(game); em.flush(); em.clear();; ..
다대일[N:1] 다대일 단방향 회원 엔티티 @Entity public class Member { @Id @Column(name = "member_id") @GeneratedValue private Long id; @ManyToOne @JoinColumn(name = "team_id") private Team team; } 팀 엔티티 @Entity public class Team { @Id @Column(name = "team_id") @GeneratedValue private Long id; private String name; } @ManyToOne 어노테이션을 사용하여 다대일 단방향 매핑 @JoinColumn 어노테이션을 사용하여 회원 테이블의 Team_Id와 회원 엔티티의 team 필드를 매핑 다대..
개요 자주 쓰이는 매핑 어노테이션에 대해 알아보자 스키마 자동 생성 JPA는 데이터베이스 스키마를 자동으로 생성하는 기능을 지원한다. persistence.xml에 다음 속성을 추가하면 애플리케이션 실행 시점에 데이터베이스 테이블을 자동으로 생성한다. 해당 속성에 대한 옵션은 아래와 같다 옵션 설명 create 기존 테이블을 삭제하고 새로 생성한다. DROP + CREATE create-drop create 속성에 추가로 애플리케이션을 종료할 때 생성한 DDL을 제거한다 update 데이터베이스 테이블과 엔티티 매핑정보를 비교해서 변경 사항만 수정한다 validate 데이터베이스 테이블과 엔티티 매핑정보를 비교해서 차이가 있으면 경고를 남기고 애플리케이션을 실행하지 않는다. DDL을 수정하지 않는다 no..
JPA에서 가장 중요한 2가지 객체와 관계형 데이터베이스 매핑하기 영속성 컨텍스트 영속성 컨텍스트란 정의 '엔티티를 영구 저장하는 환경' EntityManager로 접근이 가능하다 - em.persist(Entity); 실제로 DB에 접근하기전에 영속성 컨텍스트 환경에 엔티티를 영속화 하겠다는 의미 EntityManager와의 관계 기본적으로 하나의 엔티티 매니저가 생성되면 1:1로 하나의 영속성 컨텍스트가 생성된다 하지만 스프링 프레임워크와 같은 컨테이너 환경의 JPA에서는 여러 엔티티 매니저가 하나의 영속성 컨텍스트를 공유하게 된다 컨테이너 환경에서의 JPA 컨테이너를 사용하는 스프링과 같은 환경에서는 개발자가 EntityManager를 생성하지 않고 컨테이너가 생성 관리하게된다 스프링은 싱글톤 기반..
개요 예제 프로젝트를 통해 Hibernate를 사용해보자 Persistence.xml 설정 : META-INF/persistence.xml 파일을 통해 설정 정보를 관리한다. 속성을 보면 java 표준 속성(javax.persistence), 하이버네이트 속성(hibernate)로 나뉜다. 하이버네이트에서는 데이터베이스의 방언을 설정하게 된다. 데이터베이스 방언(=dialect)란? SQL 표준을 지키지 않거나, 특정 데이터베이스만의 고유한 기능 2. 애플리케이션에서 사용하기 public class JpaMain { public static void main(String[] args) { //엔티티 매니저 팩토리 생성 EntityManagerFactory emf = Persistence.createEnt..
개요 SQL을 직접 다룰 때 발생하는 문제, 이를 해결해주는 JPA의 기능에 대해 알아보자 SQL을 직접 다룰 때 발생하는 문제 비슷한 코드의 반복 작업 JDBC API를 사용하여 하나의 회원 조회 기능을 만든다고 가정할 때 회원 조회 SQL 작성 JDBC API를 사용하여 SQL 실행 데이터를 회원 객체와 매핑 이러한 작업을 매 SQL 요청마다 반복해야 한다. SQL에 의존적인 개발 회원 테이블에 이메일 필드를 추가할 경우에 변경해야 하는 코드 등록 코드 조회 코드 수정 코드 개발자가 직접 일일히 수정해야 한다. 엔티티 신뢰의 어려움 엔티티는 비즈니스 요구사항을 모델링한 객체이다. Member 엔티티가 Team 엔티티를 참조하고 있고 Member에서 Team 값을 조회하는 비즈니스 로직이 있을 때 DA..