본문 바로가기

Spring Data

[Spring Data] Jpa 어노테이션

이번에는 지난글에서 작성했던 Player클래스에서 사용된 어노테이션에 대해 알아볼까 합니다.


우선 지난번의 Player.java파일의 내용을 다시 한번 보겠습니다.



package com.spring.data.jpa.study.player.domain;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
@Table(name = "TB_PLAYER")
public class Player {

	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	@Column(name="player_id")
	private Long id;
	
	@Column(name="name", length=50, nullable=false)
	private String name;
	
	@Column(length=20, nullable=false)
	private String position;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPosition() {
		return position;
	}

	public void setPosition(String position) {
		this.position = position;
	}
	
}


소스에서 사용된 어노테이션은 @Entity, @Table, @Id, @GeneratedValue, @Column으로 총 5개입니다. 물론 Jpa에는 더 많은 어노테이션이 존재하지만 이변 편에서는 우선 이 5개를 알아보도록 하겠습니다.


1. @Entity

이 어노테이션은 해당 클래스가 엔티티임을 알리기 위해 사용합니다. 애플리케이션이 실행이 될 때 엔티티 자동검색을 통하여 이 어노테이션이 선언 된 클래스들은 엔티티 빈으로 등록합니다.


2. @Table

데이터의 저장소, 테이블을 의미합니다. name 값은 실제 데이터베이스의 테이블명을 의미하며, 이 어노테이션은 생략이 가능합니다. 어노테이션을 생략하면 클래스의 이름을 테이블의 이름으로 자동 인식하게 됩니다.


3. @Id

엔티티빈의 기본키를 의미합니다. 이 어노테이션은 하나의 엔티티에는 반드시 하나가 존재해야 합니다. 복수키도 설정할 수 있습니다만, 해당 내용은 후에 다루도록 하겠습니다.


4. @GeneratedValue

데이터베이스에 의해 자동으로 생성된 값이라는 의미입니다. 즉, 프로그램 상에서 조작된 데이터가 아닌, 실제 데이터베이스에 데이터가 영속(저장)될 때 생성되는 값입니다. 몇가지 생성전략이 존재합니다. 역시 해당 내용은 후에 다루도록 하겠습니다.


5. @Column

필드와 테이블의 컬럼을 매핑시켜줍니다. 이 어노테이션은 생략이 가능하며, 생략시 필드의 이름이 테이블의 컬럼으로 자동으로 매핑이됩니다.


5-1. name속성(String)

필드와 매핑 될 컬럼의 이름을 명시합니다.


5-2. nullable속성(boolean)

해당 컬럼이 null값을 허용하는가 하지않는가의 여부입니다.


5-3. length속성(int)

컬럼의 길이값을 의미합니다.


5-4. unique속성(boolean)

컬럼이 유일한 값을 가져야 하는가 아닌가의 여부입니다.


5-5. insertable속성(boolean)

엔티티가 영속될 때 insert에 참여할지 말지를 결정합니다. 기본값은 true


5-6. updatable속성(boolean)

변경된 필드의 값을 테이블에도 반영할지를 결정합니다. 기본값은 true


name속성을 제외한 나머지 속성은 잘 사용되지 않을것 이라고 생각됩니다. nullable, length, unique는 DDL과 관련된 속성이고, insertable, updatable은 원래 잘 사용되지 않는 속성이기 때문입니다.



다음은 Spring Data의 Repository를 알아볼까 합니다.