[JAVA] JPA 관련 어노테이션

Geunhyung Pyun·2024년 7월 3일
0

Java

목록 보기
5/5

대략적으로만 정리를 할 예정이다. 전부 다 보기에는 무리가 있고 공식 document를 보면 되기에 대략 알거나 자주 쓰는 것만 정리를 할 예정이다.

Access

엔티티 접근 방식에 대한 것이다. 두 가지가 존재한다.

  • FIELD : 필드에 직접 접근한다.
  • PROPERTY : Getter를 사용한다.
@Entity
@Access(AccessType.FIELD)
public class Room {
}

Column

객체 필드를 테이블 컬럼에 매핑한다.
자주 사용하는 속성으로는 다음과 같다.

속성기능기본값
name필드와 매핑할 테이블 컬럼 이름객체 필드 이름
nullablenull 값의 허용true
uniqueunique 제약 조건
length문자 길이 제약 조건255
@Column(name = "id", length = 20)
private Integer id;

Entity

클래스에 필수로 붙여야 한다. 붙여진 클래스는 JPA가 관리한다.
사용하는 속성으로는 다음과 같다.

속성기능기본값
nameJPA에서 사용할 이름클래스 이름
@Entity(name="member")
public class Member

GeneratedValue

보통 Id 어노테이션과 함께 사용한다. 키 생성 전략을 선택할 수 있는 옵션을 제공하는 어노테이션이다.
제공하는 옵션은 네가지가 있다.

  • IDENTITY : 기본 키 생성을 DB에 위임하는 전략.
  • SEQUENCE : DB 시퀀스는 유일한 값을 순서대로 생성하는 오브젝트이다. 이것을 사용해서 기본 키를 생성하는 전략이다. 시퀀스를 제공하는 Oracle, PostgreSQL 등에서만 사용할 수 있다.
    @SequenceGenerator가 필요하다.
  • TABLE : 키를 생성하는 테이블을 사용하는 전략이다.
    @TableGenerator가 필요하다. 모든 DB에 대해서 사용이 가능하지만 최적화 되어있지 않은 테이블을 사용하기에 성능 이슈가
  • AUTO : 기본 키를 각 DB에 따라 자동으로 생성하는 전략. 기본 옵션이다.
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;

@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private Long id;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

Id

해당 필드와 기본 키를 매핑시키는 것이다.

@Id
private String id;

JoinColumn

외래 키를 매핑할 때 사용한다.
자주 사용하는 속성으로는 다음과 같다.

속성기능기본값
name매핑할 외래 키 이름필드명_참조하는 테이블의 PK 컬럼명
nullablenull 값의 허용true
uniqueunique 제약 조건
foreign외래 키 제약조건을 직접 지정
@ManyToOne
@JoinColumn(name="TEAM_ID", nullable=false)
private Team team;

OneToMany, ManyToOne

  • ManyToOne : 다대일 관계
속성기능기본값
cascade영속성 전이 기능
fetch글로벌 페치 전략FetchType.EAGER
  • OneToMany : 일대다 관계
속성기능기본값
fetch글로벌 페치 전략FetchType.LAZY
mappedBy연관관계의 주인을 지정하는 속성
@OneToMany(mappedBy="room", fetch="FetchType.EAGER")
@ManyToOne(cascade="CascadeType.PERSIST", fetch="FetchType.LAZY")

PersistenceContext

컨테이너가 관리하는 엔티티 매니저를 주입하는 어노테이션이다. 이것을 사용해야 트랜잭션 기능을 사용할 수 있다.

@PersistenceContext
EntityManager em;

Table

엔티티와 매핑할 테이블을 지정한다.
사용하는 속성으로는 다음과 같다.

속성기능기본값
name매핑할 테이블 이름엔티티 이름
schemaschema 기능이 있는 DB에서 schema를 매핑
@Table
@Entity(name="member")
public class Member{}

Transactional

해당 어노테이션이 붙여있는 클래스나 메서드에 트랜잭션을 적용하게 하는 어노테이션이다.
호출하면 트랜잭션을 시작하고 종료하면 트랜잭션을 커밋한다. 예외가 나올 시 롤백한다.

@Transactional
profile
개발자를 원하는 사람.

0개의 댓글