JPA

JPA & SAMPLE PROJECT

Developer Garam.Choi 2017. 5. 29. 22:11



JPA 공부할겸 기본동작 구조 샘플링 코드에 대해서 공유합니다. GIT가시면 받을수있어요.

SAMPLE PROJECT URL = https://github.com/chr3125/jpa_test



JPA 서술 동영상 URL = http://serviceapi.rmcnmv.naver.com/flash/outKeyPlayer.nhn?vid=D27B798D516DFB5674A7F9BF709FB4025E42&outKey=V12487e3810f7f167f7ef0da87f37d557eeab09173e9a6baeb6690da87f37d557eeab&controlBarMovable=true&jsCallable=true&skinName=tvcast_white

JPA(JAVA™ PERSISTENCE API)

  • Java EE(Java Enterprise Edition) 및 Java SE(Java Standard Edition) 환경 내에서 지속성 및 오브젝트/관계 맵핑 관리를 정의한다.
  • 여러 ORM 전문가가 참여한 EJB 3.0 스펙 작업에서 기존 EJB ORM 이던 Entity Bean 을 JPA 라고 변경했다.

     

ORM(OBJECT RELATIONAL MAPPING)

  • 객체와 RDB 사이에 매핑을 정의한 메타데이터를 이용하여 자바 Application 내의 객체를 RDB 의 테이블로 자동으로(그리고 투명하게) 영속화 하는 것이다.
  • 영속화(persistence)
    • 애플리케이션의 데이터가 애플리케이션의 프로세스보다 더 오래 지속하게끔 하려는 것을 말한다.
    • Java 용어로 말하면, 객체의 상태가 JVM 의 범위를 넘어서서 지속하여 추후에 동일한 상태를 이용하려는 것이다.
    • http://hibernate.org/orm/what-is-an-orm/

 

JPA의 장단점

  • 장점
    • 객체지향적으로 데이터를 관리할 수 있기 때문에 비즈니스 로직에 집중 할 수 있으며, 객체지향 개발이 가능하다.
    • 테이블 생성, 변경, 관리가 쉽다. (JPA 를 잘 이해하고 있는 경우)
    • 로직을 쿼리에 집중하기 보다는 객체자체에 집중 할 수 있다.
    • 빠른 개발이 가능하다.
  • 단점
    • 어렵다. 장점을 더 극대화 하기 위해서 알아야 할게 많다.
    • 잘 이해하고 사용하지 않으면 데이터 손실이 있을 수 있다. (persistence context)
    • 성능상 문제가 있을 수 있다. (쿼리가 동시에 날라간다.)

 

JPA 의 구현체

 

ENTITY

  • ORM 서비스를 구성하는 가장 기초적인 클래스이다.
  • Application 에서 다루고자 하는 Table 에 대응하여 구성할 수 있다.
  • Table 이 포함하는 Column 에 대응한 속성들을 가지고 있다.
  • 필요 요건
    • Entity annotation
    • Argument 없는 생성자
    • 최상위 레벨 클래스로 생성되어야 하고, enum / interface로 정의될 수 없음
    • final 클래스로 선언될 수 없음
    • Primary Key
    • Serializable 인터페이스 구현
    • 속성 정보 접근을 위한 getter / setter 구현
  • 주요 Annotations
    • @Entity
      • 해당 클래스가 Entity 클래스임을 표시하는 것으로 클래스 선언문 위에 기재한다.
      • 테이블명과 Entity 명이 다를 때에는 name 에 해당 테이블명을 기재한다.
    • @Id
      • 해당 Attribute 가 Key 임을 표시하는 것으로 Attribute 위에 기재한다.
    • @Column
      • 해당 Attribute 와 매핑되는 컬럼정보를 입력하기 위한 것으로 Attribute 위에 기재한다.
      • 컬럼명과 Attribute 명이 일치할 경우에는 기재하지 않아도 된다.
    • @OneToOne / @OneToMany / @ManyToOne / @ManyToMany
      • 테이블간 관계를 구성하기 위한 것으로 정의되는 Attribute 위에 기재한다.
      • 각각 1:1 / 1:N / N:1 / N:N d의 관계를 표현한다.
    • @Transient
      • 테이블의 컬럼과 매핑되지 않고 쓰이는 Attribute 를 정의하고자 할 때 Attribute 위에 기재한다.

 

OPERATION

  • EntityManager
    • Entity 의 Lifecycle 과 persistence context, transaction 을 관리한다.
    • insert(persist)
    • update(merge)
      • EntityManager 의 merge() 메소드를 호출하여 DB 에 단건의 데이터를 수정할 수 있다.
      • 특정 객체가 Persistent 상태이고, 동일한 트랜잭션 내에서 해당 객체의 속성 값에 변경이 발생한 경우 merge() 메소드를 직접적으로 호출하지 않아도 트랜잭션 종료 시점에 변경 여부가 체크되어 변경 사항이 DB 에 반영된다.
    • delete(remove)
    • select(find)
  • EntityManagerFactory
    • EntityManager 를 생성하기 위한 클래스이다.
    • persistence.xml 설정에 기반한다.