스프링 공부/JPA

[JPA] 5. 테이블 자체의 어노테이션에 대하여

장아장 2022. 10. 20. 18:17

@를 붙여 매핑시키는 것을 어노테이션이라고 한다. 

이를 이용해 테이블엔 어떤 것을 매핑시킬까?

@Entity, @Table을 주로 사용한다. 각 어노테이션이 무슨 용도로 쓰이는지 알아야 한다. 

@Entity : JPA가 관리하는 객체, 즉 엔티티임을 명시해주는 용도이다. 

  • 클래스 내에 기본 생성자가 필수적으로 있어야 한다.
  • final, enum, interface, inner에는 사용할 수 없다.
  • 저장할 필드에 final을 사용하지 않는다. (그냥 private을 쓰는게 일반적인 것 같다. )

@Table : 객체가 이미 데이터베이스에 존재하는 테이블과 매핑을 할 경우, 그 테이블을 지정해주는 역할을 한다. @Table이후 괄호를 이용해 (Name = "~~", Catalog = ~~~)의 방법으로 추가로 사용할 수 있는 변수들이 있다. 

  • Name : 매핑할 테이블이 이름이 무엇인지 정할 수 있다. 
  • Catalog : 데이터베이스의 시스템 카탈로그를 매핑시킨다. 시스템 카탈로그의 특징은 다음과 같다. 
    • 시스템 카탈로그는 데이터 사전이라고도 한다.
    • 데이터베이스에 저장되는 데이터에 관한 정보, 즉 메타 데이터를 유지하는 시스템 데이터베이스이다.
    •  참고해야 하는 스키마, 사상정보, 다양한 제약조건등을 저장한다. 
    • 데이터베이스 관리 시스템이 직접 생성하고 유지시킨다. 
    • 일반 사용자도 접근이 가능하지만, 저장 내용을 검색할 수는 없다. 
  • Schema : 데이터베이스의 스키마를 매핑시켜준다. 
  • uniqueConstraints : DDL(데이터베이스 생성어)를 만들 시 유니크 제약조건을 생성시켜준다. 

 

엔티티 매핑을 시킬 경우, 스키마를 자동으로 생성시켜준다. 

이는 애플리케이션 시점에서 자동 생성시키는 것으로, 이를 통해 테이블 중심의 프로그래밍에서 객체 중심으로 넘어갈 수 있게 된다. 

애플리케이션에서 데이터베이스 방언을 활용해 mySQL, oracleDB등 데이터베이스에 맞는 DDL을 생성시켜준다. 

이 때, Maven = persistence.yml로, Gradle = application.yml로 어떤 데이터베이스에 맞게 바꿀지 설정해준다. 

 

중요한 것은, 개발 때 생성된 DDL은 운영서버에서는 절대 사용하면 안된다는 것이다.