JPA ENTITY

devyunie·2024년 8월 26일

SpringBoot

목록 보기
11/13
post-thumbnail

Entity?

JPA를 사용하고자 할때 데이터베이스 테이블과 매핑되는 JAVA 객체
RDBMS의 테이블과 매핑되는 ORM의 클래스

  • 웹 애플리케이션과 서버와 데이터베이스 서버 간의 데이터 전송 및 관리를 위한 객체
  • 각 Entity 인스턴스는 데이터베이스 테이블의 하나의 레코드에 해당
  • Entity클래스는 JPA를 사용하여 데이터베이스와의 상호 작용을 추상화
  • 데이터베이스의 테이블과 객체지향 코드를 쉽게 연결 가능
  • Entity 클래스의 경우 완벽한 캡슐화를 지향
    --> setter메소드 지향 (DB와 Spring간의 데이터 불일치 문제 발생)

@Entitiy

Java 클래스를 JPA Entity로 표시하여 해당 클래스를 데이터베이스의 테이블과 매핑할 수 있도록 한다.(Entity 클래스 지정)

  • 주요 목적은 ORM을 설정 (JPA에서 데이터 관리를 위해 사용되는 주된 객체)
  • @Entity를 이용하여 정의된 Entity 클래스는 JPA를 사용하여 데이터 액세스 계층을 구현할 때 구현되며 복잡한 SQL 쿼리를 작성하지 않고도 데이터베이스 작업을 수행할 수 있다.

@Entity 어노테이션에 name이라는 속성을 통해 Entity 자체의 이름을 지정할 수 있다.
@Entity(name = "sample_table_1")

💡Tip
JAVA17이상 import jakarta.persistence.Entity;
JAVA17이하 import javax.persistence.Entity;


@Table

JPA Entity 클래스와 데이터베이스 테이블간의 매핑을 설정하거나 수정할 때 사용

  • 만약 java의 class명과 RDBMS의 table명이 동일하다면 유추하여 매핑
  • 이름이 서로 다르다면 name 속성으로 매핑할 table명을 지정할 수 있음

@Table 어노테이션의 속성

name

  • 엔티티와 매핑할 데이터베이스 테이블의 이름을 지정합니다.

schema

  • 테이블이 속한 스키마를 지정합니다. 이 속성은 선택 사항이며, 데이터베이스에서 스키마를 사용하는 경우에만 필요합니다.

catalog

  • 테이블이 속한 카탈로그를 지정합니다. 이 속성은 선택 사항이며, 데이터베이스에서 카탈로그를 사용하는 경우에만 필요합니다.

uniqueConstraints

  • 테이블에 적용할 고유 제약 조건을 지정합니다. 이 속성은 선택 사항이며, 고유 제약 조건이 필요한 경우에만 사용합니다.

@Id

JPA Entity 클래스에서 Primary Key에 해당하는 필드를 표시하는데 사용하는 어노테이션


@GeneratedValue

Entity 클래스의 Primary Key에 대한 값을 자동 생성 전략을 지정하는 어노테이션

Strategy 속성으로 전략지정

GenerationType.AUTO

  • JPA가 적절한 생성 전략을 선택

GenerationType.IDENTITY

  • auto_increment 전략 선택

GenerationType.SEQUENCE

  • 데이터 베이스의 sequence 생성 전략 선택

GenerationType.TABLE

  • 키 생성 목적의 테이블을 이용하여 생성하는 전략 선택

@Column

Entity 클래스 필드와 데이터베이스 테이블의 컬럼을 매핑을 설정하거나 수정하는 데 사용

@Column 속성

name

  • 매핑할 컬럼의 이름

nullable

  • null 포함 여부

unique

  • unique 제약 여부

length

  • 컬럼의 길이

-> 만약 테이블의 컬럼명과 필드명이 동일하다면 생략이 가능


전체적인 코드

//SampleTable1

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity(name = "sample_table_1")
@Table(name = "sample_table_1")
public class SampleTable1Entity {

	@Id
	@Column(name="sample_id", nullable = false, unique = true)
	private String sampleId;
	
	@Column(name = "sample_column", nullable=false)
	private Integer sampleColumn; //DB에서 NULL값을 받을수도 있기 떄문에
}
//SampleTable2

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity(name = "st2")
@Table(name="sample_table_2")
public class SampleTable2Entity {
	
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Integer sampleAi;
	
	private Boolean sampleColumn;

}

0개의 댓글