STUDY/JPA

    [4-2] Entity Mapping - 객체&테이블, 필드&컬럼

    [4-2] Entity Mapping - 객체&테이블, 필드&컬럼

    인프런 - 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의노트 객체와 테이블 매핑 @Entity, @Table @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 ※ 주의 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자) : 내부 동작하는데 필요하기 때문에(객체를 프록싱..하는데 쓰인다고 함!) final 클래스, enum, interface, inner 클래스 사용 X 저장할 필드에 final 사용 X → 추후에 왜 이 주의점들을 지켜야 하는지 알아보고 기록하자. @Entity 속성 name JPA에서 사용할 엔티티 이름을 지정한다. 기본값 : 클래스 이름을 그대로 사용(예 : Member) 같은 ..

    [4-1] JPA - DDL 자동 생성

    [4-1] JPA - DDL 자동 생성

    인프런 - 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의노트 데이터베이스 스키마 자동 생성 DDL을 애플리케이션 실행 시점에 자동 생성(Data Definition Language : 데이터베이스 스키마를 정의하는 일련의 SQL 명령), 어플리케이션 실행 시점에 Entity를 인식하여 데이터베이스 테이블을 만들고 인식된 Column을 자동 생성한다. 테이블 중심 → 객체 중심 데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL 생성 이렇게 생성된 DDL은 개발 장비에서만 사용, 운영에서는 사용 X 생성된 DDL은 운영서버에서는 사용하지 않거나, 적절히 다듬은 후 사용 속성 : hibernate.hbm2ddl.auto create : 기존테이블 삭제 후 다시 생성 ( DROP + CREAT..

    [3-4] 준영속 상태

    인프런 - 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의노트 준영속 상태 영속상태에서 준영속 상태가 되는 것 영속 상태가 되는 경우 : persist(), find()해서 1차 캐시에 없을 때 영속 상태의 엔티티가 영속성 컨텍스트에서 분리(datached) 영속성 컨텍스트가 제공하는 기능을 사용하지 못함 ( ex. 더티체킹 ) 준영속 상태로 만드는 방법 em.datach(entity) 특정 엔티티만 준영속 상태로 전환 Member member = em.find(Member.class, 150L); // 영속 상태 member.setName("AAAAA"); em.detach(member); // 준영속 상태 System.out.println("========================="); tx..

    [3-3] 플러시

    인프런 - 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의노트 플러시란? 영속성 컨텍스트의 변경내용을 데이터베이스에 반영하는 것! 트랜잭션이 커밋될 때 플러시가 일어난다. 영속성 컨텍스트의 쿼리를 DB에 날려준다. 플러시가 발생되면 어떤 일이 일어나는가? 변경 감지가 일어남. 수정된 엔티티에 대하여 쓰기 지연 SQL 저장소에 쿼리가 등록된다.등록된 쿼리를 DB에 전송(등록, 수정, 삭제 쿼리) 플러시가 발생한다고 해서 DB 트랜잭션이 커밋되는 것은 아니다. 영속성 컨텍스트를 플러시하는 방법 직접 쓸 일은 없는데 테스트해보려면 알아야 한다. 1. em.flush() > 직접 호출 Member member = new Member(200L, "member200"); em.persist(member); em..

    [3-2] 영속성 컨텍스트의 이점 (+Batch)

    인프런 - 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의노트 영속성 컨텍스트의 이점 1. 1차 캐시 저장 Entity를 영속성 컨텍스트에 저장할 때, EntityManager가 Entity를 영속성 컨텍스트의 1차 캐시에 저장한다. em.persist(member)이후 find를 넣었는데 쿼리는 commit할 때 나간다. DB단에서 조회해오지 않고, 1차 캐시에서 조회해 오기 때문. // 비영속 Member member = new Member(); member.setId(101L); member.setName("HelloJPA"); //영속 System.out.println("=== BEFORE ==="); em.persist(member); System.out.println("=== AFTER =..

    [3-1] 영속성 컨텍스트란?

    인프런 - 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의노트 JPA에서 가장 중요한 2가지 객체와 관계형 데이터베이스 매핑하기(Object Relational Mapping) 영속성 컨텍스트(JPA가 내부에서 어떻게 동작하는가) EntityManagerFactory와 EntityManager 영속성 컨텍스트 JPA를 이해하는데 가장 중요한 용어 "엔티티를 영구 저장하는 환경"이라는 뜻 EntityManager.persist(entity); DB에 저장 X, 영속성 컨텍스트를 통해서 Entity를 영속화한다.는 뜻. 좀 더 정확히 말해서 영속성 컨텍스트에 entity를 저장한다는 것 EntityManager? 영속성 컨텍스트? 영속성 컨텍스트는 논리적인 개념이고, 눈에 보이지 않는다 EntityMan..

    [2-1] JPA 시작하기

    인프런 - 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의노트 데이터베이스 방언 JPA는 특정 데이터베이스에 종속되지 않는다. 각각의 데이터베이스가 제공하는 SQL 문법과 함수는 조금씩 다르다. 방언 : SQL 표준을 지키지 않는 특정 데이터베이스만의 고유한 기능 어플리케이션을 설정할 때, 어떤 방언으로 변환하여 쿼리를 날려야 할지 정해 줄 수 있다. hibernate는 40가지 이상의 데이터베이스 방언을 지원한다. ex. H2 데이터베이스 쿼리로 바꿔서 날려줘~ JPA 구동 방식 Persistence가 MeTA-INF/persistence.xml에서 설정 정보를 조회 Persistence가 EntityManagerFactory 생성 EntityManagerFactory가 EntityManager 생..

    [1-2] JPA 소개

    인프런 - 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의노트 JPA란? Java Persistence API 자바 진영의 ORM 기술 표준 ORM : Object-relational mapping(객체 관계 매핑) 객체는 객체대로, 관계형 DB는 관계형 DB대로 설계 ORM 프레임워크가 중간에서 객체와 관계형 DB를 매핑 대중적인 언어에는 대부분 ORM 기술이 존재 JPA를 왜 사용해야 하는가? SQL 중심적 개발에서 객체 중심 개발로! 1. 생산성 기존 Entity를 쿼리 문이 아니라 간단한 메서드로 필요한 작업을 수행할 수 있다. persist(), find(), set(), remove() 2. 유지보수 예전에는 필드 변경시 모든 쿼리를 수정하여야 했는데, JPA에서는 필드 변경만 해주면 쿼리..

    [1-1] JPA가 나오게 된 배경 - SQL 중심적인 개발의 문제점

    인프런 - 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의노트 보통 애플리케이션을 개발할 때는 객체 지향 언어로 개발한다.(Java, Python, Scala, ...) 데이터베이스를 사용할 때는 보통 관계형 DB를 많이 사용한다. NoSQL은 부가적으로 사용하는 경우가 많다. 그러면 객체를 관계형 데이터베이스에 저장하는 것이 필수적인 작업이다. 객체를 관계형 데이터베이스에 저장하려면 SQL을 이용하여 저장하여야 한다. SQL 중심적인 개발의 문제점 SQL을 이용하여 저장할 때, 한 객체에서 필드 하나만 추가 되어도 쿼리 문이 많이 복잡해진다. 객체와 관계형 데이터베이스는 비슷하면서도 다르다. 1. 상속 Table 슈퍼타입 서브타입 관계 -> 부모의 ID를 PK, FK로 가져와서 필요할때마다 Join..