본문 바로가기

JPA

(43)
객체와 Table 매핑 객체와 Table을 매핑할 때 어떤 어노테이션들이 필요한지 가볍게 알아보자~~~ 객체와 Table 매핑 @Entity @Entity가 붙은 클래스는 JPA가 관리하게 되고, 우리는 이 클래스를 보고 엔티티라고 한다. protected 이상의 접근제어자가 지정된 기본생성자(매개변수가 없는 생성자)를 가져야 하며, JPA를 사용해서 Table과 매핑할 클래스에 @Entity는 필수 어노테이션이다. @Table 엔티티와 매핑할 Table을 지정하기 위한 어노테이션이다. 이 어노테이션이 없으면 기본적으로 엔티티명과 같은 Table을 DB에서 찾아서 매핑해준다. 만약 클래스명과 엔티티명이 다를 경우에는 name 속성을 이용해서 Table명을 지정해주면 된다. 필드와 컬럼 매핑 @Id - PK 매핑 어노테이션 @C..
flush code-mania.tistory.com/12에서 살펴봤듯이 flush는 영속성 컨텍스트의 내용을 DB에 반영하는 메서드이다. flush 내부 동작은 다음과 같다. 1. 변경 감지 - 수정된 엔티티를 감지하여 쓰기 지연 SQL에 저장소에 등록 2. 쓰기 지연 SQL 저장소의 쿼리들을 DB에 전송 flush를 하는 방법 em.flush(); - EntityManager 객체의 flush 메서드를 직접 호출한다. transaction.commit(); - Transaction 객체의 commit 메서드를 호출하면 flush 메서드가 자동호출된다. em.createQuery("select M from Member M"); - JPQL 실행 시 flush 메서드가 자동호출된다. JPQL 실행 시 flush가 자..
영속성 컨텍스트의 장점 package hellojpa; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "MEMBER") public class Member { @Id private Long id; private String name; public Member(Long id, String name) { this.id = id; this.name = name; } protected Member() { } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String g..
영속성 컨텍스트 JPA에서 정말 중요한 개념 중 하나인 영속성 컨텍스트!!!! 무엇인지 파헤쳐보자~~~ 웹에서의 JPA JPA가 웹 환경에서 동작할 때 웹으로 오는 각 요청마다 EntityManagerFactory에 의해 EntityManager 객체가 생성된다. 또한 생성된 EntityManager 객체는 DB connection pool을 활용해 DB와 접속한다. 우리는 이렇게 DB에 접속된 EntityManager를 활용해서 각종 쿼리를 날리며 DB와 통신한다. package hellojpa; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransac..
JPA로 CRUD해보기(4) JPQL 실무에서 상황이 꼬이고 꼬이다보면 단순한 CRUD가 아니라 내가 쿼리를 직접 짜야 될 경우도 있다. 이를 위한 것이 JPQL이다. 백문이불여일견!!!! JPQL 실습을 해보도록 하자 JPQL 실습해보기 JPA로 CRUD해보기(2) 틀 코드 작성하기 시간에 만들었던 JpaMain.java의 "//CRUD 로직" 부분에 다음과 같이 코드를 작성해보자!!! List result = em.createQuery("select m from Member as m", Member.class).getResultList(); for (Member member : result) { System.out.println("member.getName() = " + member.getName()); } 실행하면 MEMBER 테이블에..
JPA로 CRUD해보기(3) Entity와 CRUD 코드 작성해보기 드디어 CRUD를 직접 해보는 시간이다. 기대되지 않나??? 아니면 말고 ㅋㅋㅋㅋ JPA에는 Entity라는 개념이 존재한다. Entity는 쉽게 테이블 구조를 객체로 변환한 것이라고 생각하면 된다. Entity가 낯설다면 VO 혹은 DTO같은 역할이라고 생각하면 이해가 더 쉽다. 백문이불여일견, hellojpa 패키지 아래에 Member class를 만들어주자~~~ package hellojpa; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity //꼭 넣어야 된다. 이 Entity Annotation이 붙어있어야 JPA가 관리한다. @Table(name = "MEMBER..
JPA로 CRUD해보기(2) 틀 코드 작성하기 JPA의 동작방식 알아보기 1. Persistence라는 클래스로부터 시작된다. 2. Persistence 클래스는 먼저 META-INF/persistence.xml에서 설정을 읽어온다. 3. 읽어온 설정을 통해 EntityManagerFactory라는 클래스를 만들어준다. 4. 우리는 EntityManagerFactory에서 필요할 때마다 EntityManager를 찍어내서 코드를 실행하면 된다. 이것만 읽고는 이해하기 힘들 것이다!!! 실습하면서 이해해보자!!!!! hellojpa 패키지 안에 JpaMain 클래스를 다음과 같이 만들어주면 틀 코드 완성이다~~~ package hellojpa; import javax.persistence.EntityManager; import javax.persist..
JPA로 CRUD해보기(1) DB 구축하기 먼저 h2 Database를 실행시킨다. h2의 설치 경로의 bin에 가서 h2.bat을 실행시키면 된다.(linux는 h2.sh) 그러면 DB접속 창이 나온다. 여기에서 적당히 설정을 해주고, 접속하자! (설정이 처음이라면 h2 DB 접속하기를 참고하자!) persistenc.xml의 DB설정 부분과 연결에 성공한 DB접속 창을 보면 내용은 똑같다는 것을 알 수 있는데, 만약에 다른 DB를 쓸 경우 해당 DB에 맞게 드라이버와 url, id, pw 설정을 해주어야 한다. 그러면 이제 우리가 연습용으로 쓸 Table을 일단 하나 만들어보겠다. 아래 쿼리를 실행한 h2 DB에 적당히 붙여넣고 실행하면 왼쪽에 MEMBER 테이블이 만들어진 것을 볼 수 있다. 쿼리는 어느 정도 안다는 가정 하에 더 이상의 설..