JAVA/ORM

jpa) DB와 매핑 어노테이션 @Entity, @Table, @Id, @Column

읽히는 블로그 2024. 5. 14. 18:25

▤ 목차

    어노테이션이란?

    자바 컴파일러에게 문법 에러를 체크하도록 정보를 제공하기 위해 사용되는 클래스이다.

    • 프로그램을 빌드할때 코드를 자동으로 생성할 수 있도록 정보를 제공한다.
    • 런타임에 특정 기능을 실행하도록 정보를 제공한다.
    • 개발자 입장에서 더욱 직관적이기에 코드를 이해하기 쉽다.
    • 다른 사람에게 설명할 수 있도록 정보를 제공한다.

    기본 코드

    public class SangpumTable {
    	private int code;
    	private String sang;
    	private int su;
    	private int dan;
    	
    	public SangpumTable() {
    		// jpa에서 생성자는 비어있어도 무조건 적어줘야한다.
    	}

    데이터베이스

     

    ✔ @Entity

    ⌨ 형식

    @Entity

    JPA를 사용해 테이블과 매핑할 클래스를 붙여주는 어노테이션이다.

    JPA가 해당 클래스를 관리하게 된다.

     

    선택사항)
    엔터티 이름입니다. 기본값은 엔터티 클래스의 정규화되지 않은 이름입니다. 이 이름은 쿼리에서 엔터티를 참조하는 데 사용됩니다. 이름은 Jakarta Persistence 쿼리 언어에서 예약된 리터럴이 아니어야 합니다.

    👏 중요

    기본 생성자가 꼭 필요하다. final, emum, interface, inner class에서는 사용이 불가능하다.

    필드변수를 final로 선언이 불가능하다.

     

    ✔@Table

    ⌨ 형식

    @Table(name = "테이블 이름")

    [참고 사이트] https://cjw-awdsd.tistory.com/46

     

     

    👏 중요

    @Table 어노테이션에 name 속성을 추가할 수 있지만 생략하고 싶으면 @Entity 어노테이션에서 name 속성을 주면 된다.

    ✔ @Id

    ⌨ 형식

    @Id

    특정 속성을 기본키로 설정하는 어노테이션이다.

    이 어노테이션만 적게될 경우 기본키 값을 직접 부여해줘야한다.

     

    @id 어노테이션만 적게될 경우 기본키 값을 직접 부여해줘야한다.

    보통 DB를 설계할 때는 기본키는 직접 부여하지 않고 mysql 에서 Auto_Increment처럼 자동부여된다.

    @GeneratedValue 어노테이션을 사용하면 기본값을 DB에서 자동으로 생성하는 전략을 사용할 수 있다.

    [참고 사이트]https://cjw-awdsd.tistory.com/46

    DB마다 지원하는 방식이 다르기에 다양한 전략이 필요하다.

    AUTO 같은 경우, DB에 따라 자동으로 선택한다. (DB를 변경해도 코드를 수정할 필요없다)

     

     

    👏 중요

    ✔@Column

    ⌨ 형식

    @Column(name="칼럼명")

     

    객체 필드를 테이블 컬럼과 매핑하는 역할을 한다.

    [참고사이트] https://cjw-awdsd.tistory.com/46

     

     

    👏 중요

    원본테이블에서 칼럼명과 동일하다면 생략이 가능하다.

     

     

    😊정리

    이 외에도 @Acess(JPA가 엔티티 데이터에 접근하는 방식을 지정), @Enumerated ..등 다양한 어노테이션이 있다.

    가장 기본되는 어노테이션을 정리해봤다.

     

    @Entity // JPA를 사용해 테이블과 매핑할 클래스에 붙여주는 어노테이션
    @Table(name="sangdata") //테이블 이름이 같지 않으면 적어줘야한다. 물리적인 테이블명 sangdata
    public class SangpumTable {
    	@Id //pk칼럼 알려주는 어노테이션
    	@Column(name="code") //지금처럼 원본테이블과 칼럼명이 같으면 생략가능 
    	private int code;
    	@Column(name="sang", nullable = false) //
    	private String sang;
    	private int su;
    	private int dan;
    	
    	public SangpumTable() {
    		// jpa에서 생성자는 비어있어도 무조건 적어줘야한다.
    	}