티스토리 뷰

WEB/기타

[JPA] 3. Entity - 설정, 속성

silverline79 2024. 1. 20. 00:03

3. Entity

엔티티는 영속성을 가진 객체로 DB 테이블에 보관할 대상(영속 컨텍스트에 속한 객체)

이러한 엔티티는 특정한 시점에 DB에 영향을 미치는 쿼리를 실행

 

엔티티를 설정하는 방법

1. @Entity 어노테이션을 이용

2. xml 설정을 이용

 

function Annotation
객체와 테이블 매핑 @Entity, @table
기본 키 매핑 @Id
필드와 컬럼 매핑 @Column
연관관계 매핑 @ManyToOne, @JoinColumn

@Entity JPA를 사용할 클래스를 명시하며, 테이블과 매핑하는 역할

@Entity가 붙은 클래스는 JPA가 관리하는 클래스로, 해당 클래스를 엔티티라고 함.

JPA를 사용해서 테이블과 매핑할 클래스는 반드시 @Entity 를 붙여야 함.

 

@Entity의 속성

속성명 설명 기본값
name JPA에서 사용할 엔티티 이름을 지정
다른 패키지에 이름이 같은 이름이 있다면 직접 지정하여 충돌을 방지해야함
클래스 이름

 

@Entity사용 시 주의 사항

1. 기본 생성자 필수

2. final 클래스, enum, interface, inner 클래스에는 사용 불가

3. 저장할 필드에 final 사용불가

4. 기본 생성자는 자동으로 생성 그러나, 생성자를 하나 이상 만들면 기본 생성자도 정의해야 한다.

 

@Table 엔티티와 매핑할 테이블을 지정

기본적으로 @Entity로 선언된 클래스의 이름은 실제 데이터베이스의 테이블 명과 일치하는 것을 매핑함.

@Entity의 클래스명과 데이터베이스의 테이블명이 다를 경우에 @Table(name=" ")과 같은 형식을 사용해서 매핑이 가능

@Table 주석을 사용하지 않으면 엔티티 이름이 테이블 이름으로 간주

 

@Table의 속성

속성명 설명 기본값
name 매핑할 테이블 이름을 설정 엔티티 이름
catalog 카달로그 기능이 있는 데이터 베이스에서 catalog를 매핑  
schema schema 기능이 있는 데이터 베이스에서 schema를 매핑  
uniqueConstraint DDL 생성시 유니크 제약조건을 만들며,
2개 이상의 복합 유니크 제약 조건도 만들 수 있음.
스키마 자동 생성 기능을 사용해서 DDL을 만들때만 사용
 
@Entity @Table
@Entity
public class Kepco {
//...
}
@Entity
@Table(name="Kepco_info")
public class Kepco{
// ...
}
JPA에서는 쿼리를 자동으로 생성해줌.
JPA는 클래스 이름을 테이블 이름으로 사용하는있는데 엔티티는 기본적으로 Kepco 테이블과 매핑됨
클래스 이름과 테이블 이름이 다른 경우
@Table(name=”테이블명”)을 사용하여 테이블의 이름을 지정할 수 있음.

@Id 기본키(Primary Key)라는 것을 명시하는 역할

모든 엔티티에 반드시 @Id 지정해 주어야 함

@Id가 사용된 필드를 "식별자 필드"라 함.

@GeneratedValue와 함께 식별키를 어떤 전략으로 생성하는지 명시@GeneratedValue : 키값의 자동생성 전략을 설정

 

[기본키 할당 방법 ]

직접할당 : 기본 키를 어플리케이션에서 직접 할당 해주는 방법 

자동생성 : 데이터베이스가 자동으로 할당해주는 방법  (예를들어, 오라클은 sequence, MySQLauto_increment)

데이터베이스 벤더마다 sequence, auto_increment 등 기본키를 자동생성하는 지원하는

방법이 다름 / Spring Data JPA는 이를 해결하기위해, 4가지 자동생성 방법을 제공

 

[기본키 자동생성 사용방법 ]

@Id 어노테이션을 사용한다.

@GeneratedValue를 사용한다.

@GeneratedValue에 원하는 키 생성 전략을 선택한다. (IDENTITY, SEQUENCE, TABLE, AUTO)

 

[ 기본키 자동생성 방법 4가지  ]

IDENTITY  기본 키 생성을 데이터베이스에 위임하는 방법 (데이터베이스에 의존적)
주로 MySQL, PostgresSQL, SQL Server, DB2에서 사용
SEQUENCE 데이터베이스 시퀀스를 사용해서 기본 키를 할당하는 방법 (데이터베이스에 의존적)
주로 시퀀스를 지원하는 Oracle, PostgresSQL, DB2, H2에서 사용
@SequenceGenerator를 사용하여 시퀀스 생성기를 등록하고, 실제 데이터베이스의 생성될 시퀀스이름을 지정해줘야 함.
TABLE  키 생성 테이블을 사용하는 방법
키 생성 전용 테이블을 하나 만들고 여기에 이름과 값으로 사용할 컬럼을 만드는 방법
테이블을 사용하므로, 데이터베이스 벤더에 상관없이 모든 데이터베이스에 적용이 가능
AUTO 데이터베이스 벤더에 의존하지 않고, 데이터베이스는 기본키를 할당하는 벙법
데이터베이스에 따라서 IDENTITY, SEQUENCE, TABLE 방법 중 하나를 자동으로 선택해주는 방법
Oracle일 경우 SEQUENCE를 자동으로 선택해서 사용. 따라서데이터베이스를 변경해도 코드를 수정할 필요가 없음

 

@Column 컬럼의 속성값을 설정

인스턴스 변수가 칼럼이 되기 때문에, 컬럼명을 별도로 지정하거나 컬럼의 사이즈, 제약조건들을 추가하기 위해 사용

@Column 어노테이션은 프로퍼티의 이름과 테이블의 칼럼 이름이 같다면 생략이 가능하지만, 다를 경우에는 @Column 어노테이션을 지정해줘야 함.

@Entity
@Table(name="Kepco_info")
public class Kepco {
@Id
private String number;
private String name;


@Column(name="description")
private String desc;
}
INSERT, UPDATE, DELETE의 동작이 보통과 다르기 때문에 예상하지 못하거나 실수를 방지하기 위해 읽기 전용 매핑설정이 가능 @Column(name="id", insertable=false, updatable=false)

@Column의 속성

속성명 설명 기본값
name 맵핑할 테이블의 컬럼 이름을 지정  
insertable 엔티티 저장시 선언된 필드도 같이 저장  
updateable 엔티티 수정시 이 필드를 함께 수정  
table 지정한 필드를 다른 테이블에 맵핑  
nullable NULL을 허용할지, 허용하지 않을지 결정  
unique 제약조건을 걸 때 사용  
columnDefinition DB 컬럼 정보를 직접적으로 지정할 때 사용  
length 길이를 입 255
precsion, scale BigInteger, BigDecimal 타입에서 사용, 각각 소수점 포함 자리수, 소수의 자리수를 의미  

 

'WEB > 기타' 카테고리의 다른 글

[JPA] 4. Repository  (0) 2024.01.23
[JPA] 3. Entity - 연관관계 매핑  (0) 2024.01.20
[JPA] 2. JPA 사용 설정  (0) 2024.01.20
[JPA] 1. JPA (Java Persistence API) 란?  (0) 2024.01.20
DBMS, JDBC, ORM, Hibernate  (0) 2024.01.20
댓글