OKdevTV Docs
Home OKdevTV
ESC
spring 3 min read 4.9 KB Raw Markdown
On this page (6)

JPA

  • Java Persistence API
  • ORM의 자바 표준 규격; Object Relation Mapping
  • Bridge between object models(Java) and relational models(database)
  • Relational: table 구조, Object: graph 구조
  • JSR 220, JSR 317, JSR 338
  • JPA Provider
    • Hibernate, Eclipselink, Toplink, Spring Data JPA, etc.
ORM

관계형과 차이점

  • Granularity: 객체 모델은 관계형 모델보다 세분화됩니다.
  • Subtypes: 하위 유형(상속을 의미)은 모든 유형의 관계형 데이터베이스에서 지원되지 않습니다.
  • Identity: 객체 모델과 마찬가지로 관계형 모델은 동등성을 작성하는 동안 정체성을 노출하지 않습니다.
  • Associations: 관계형 모델은 개체 도메인 모델을 조사하는 동안 여러 관계를 결정할 수 없습니다.
  • Data navigation: 객체 네트워크의 객체 간 데이터 탐색은 두 모델에서 다릅니다.

Class Level Architecture

JPA Class Relationships
  • javax.persistence.*
  • Entity: 데이터를 저장하기 위한 객체
  • Persistence: EntityManagerFactory 인스턴스를 제공하는 클래스
  • Query: 질의에 대한 관계형 객체를 가져오는 JPA 벤더에서 제공하는 구현체
  • EntityTransaction: EntityManager와 1:1의 관계
  • EntityManager: 객체의 퍼시스턴스 작업을 수행
  • EntityManagerFactory: EntityManager 생성

Annotation

Annotation 기술
@Entity 클래스를 엔티티 또는 테이블로 선언합니다.
@Table 테이블 이름을 선언합니다.
@Basic 비 제약 필드를 명시적으로 지정합니다.
@Embedded 값이 포함 가능한 클래스의 인스턴스인 엔터티 또는 클래스의 속성을 지정합니다.
@Id 클래스의 ID (테이블의 기본 키)에 사용되는 속성을 지정합니다.
@GeneratedValue 자동, 수동 또는 시퀀스 테이블에서 가져온 값과 같은 ID 속성을 초기화 할 수 있는 방법을 지정합니다.
@Transient 영구적이지 않은 속성을 지정합니다. 즉, 값이 데이터베이스에 저장되지 않습니다.
@Column 지속성 프로퍼티에 대한 열 속성을 지정합니다.
@SequenceGenerator @GeneratedValue 어노테이션에 지정된 특성 값을 지정합니다. 시퀀스를 생성합니다.
@TableGenerator @GeneratedValue 주석에 지정된 속성에 대한 값 생성기를 지정합니다. 값 생성을 위한 테이블을 만듭니다.
@AccessType 액세스 유형을 설정하는 데 사용됩니다. @AccessType(FIELD)을 설정하면 Field 단위로, @AccessType(PROPERTY)을 설정하면 Property 단위로 접근이 이루어집니다.
@JoinColumn 엔터티 연결 또는 엔터티 컬렉션을 지정합니다. 이것은 다 대 일 및 일 대 다 연결에 사용됩니다.
@UniqueConstraint 1차 또는 2차 테이블에 대한 필드 및 고유 제한 조건을 지정합니다.
@ColumnResult select 절을 사용하여 SQL 쿼리의 열 이름을 참조합니다.
@ManyToMany 조인 테이블 간의 다 대 다 관계를 정의합니다.
@ManyToOne 조인 테이블 간의 다 대 일 관계를 정의합니다.
@OneToMany 조인 테이블 간의 일 대 다 관계를 정의합니다.
@OneToOne 조인 테이블 간의 일 대 일 관계를 정의합니다.
@NamedQueries 명명된 쿼리 목록을 지정합니다.
@NamedQuery 정적 이름을 사용하여 쿼리를 지정합니다.

Entity

  • @ManyToOne Relation
  • @OneToMany Relation
  • @OneToOne Relation
  • @ManyToMany Relation
java
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity // This tells Hibernate to make a table out of this class
public class User {
  @Id
  @GeneratedValue(strategy=GenerationType.AUTO)
  private Integer id;

  private String name;

  private String email;
// setters and getters
}

CrudRepository Interface

java
package com.example.jpademo;

import org.springframework.data.repository.CrudRepository;

// This will be AUTO IMPLEMENTED by Spring into a Bean called userRepository
// CRUD refers Create, Read, Update, Delete

public interface UserRepository extends CrudRepository<User, Integer> {
}

java
@Bean
public CommandLineRunner demo() {
  return (args) -> {
    User user = new User();
    user.setName("Kenu");
    user.setEmail("[email protected]");
    userRepository.save(user);

    Iterable<User> all = userRepository.findAll();
    for (User u : all) {
      log.info(u.toString());
    }
  }
}

ref