Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 컴퓨터공학 #c #c언어 #문자열입력
- BOJ #컴퓨터공학 #C++ #알고리즘 #자료구조
- 잔
- 컴퓨터공학 #Java #자바 #클래스 #객체 #인스턴스
- 컴퓨터공학 #자료구조 #스택 #c++ #알고리즘 #백준문제풀이
- HTML #CSS
Archives
- Today
- Total
영벨롭 개발 일지
[Spring] Spring Data JPA - 엔티티 Entity 매핑 본문
★ @Entity
@Entity 어노테이션이 붙은 클래스는 JPA 가 관리하는 것으로, 엔티티라고 불립니다.
자동으로 데이터베이스의 테이블과 매핑됩니다.
- 기본 생성자 필수
- final 클래스, enum, interface, inner class 에는 사용 불가
- 저장할 필드에 final 사용 불가
속성 | |
name | JPA 에서 사용할 엔티티 이름 지정 (default 는 클래스 이름) |
★ @Table
엔티티와 매핑할 테이블을 지정합니다. @Entity 의 이름이 기본값이며, 테이블의 이름은 SQL 에서 사용됩니다.
속성 | |
name | 매핑할 테이블 이름 지정 (default 는 Entity 이름) |
catalog | catalog 기능이 있는 DB 에서 catalog 를 매핑 (default 는 DB 명) |
schema | schema 기능이 있는 DB 에서 schema 를 매핑 |
uniqueConstraints | DDL 생성 시 유니크 제약조건을 정의 스키마 재동 생성 기능을 사용해서 DDL 을 만들 때만 사용 |
스키마 자동 생성 기능
// application.properties
spring.jpa.hibernamte.ddl-auto = update
★ @Id
Entity 의 기본키를 매핑할 때 사용합니다.
자바의 모든 Primitive 타입과 해당 Wrapper 클래스 타입, Date, BigDecimal, BigInteger 등을 사용할 수 있습니다.
★ @GeneratedValue
기본키의 생성 방법을 매핑하는 어노테이션으로, 생성 전략(strategy)과 생성기(generator)를 설정할 수 있습니다.
속성 | |
strategy | 생성 전략 타입 (GenerationType) (default 는 AUTO) |
generator | 생성기 (default 는 "") |
GenerationType | |
AUTO | 선택한 데이터베이스 방언에 따라 방식을 자동으로 선택(default) |
IDENTITY | 기본 키 생성을 데이터베이스에 위임 (= AUTO_INCREMENT) |
SEQUENCE | 데이터베이스 시퀀스 오브젝트를 사용해서 기본키 할당 |
TABLE | 키 생성 테이블 사용 |
★ @Column
객체 필드를 테이블 칼럼에 매핑합니다.
속성 | |
name | 필드와 매핑할 테이블 칼럼 이름 지정 (default 는 객체 필드 명) |
nullable | null 값 허용 여부 (default 는 true) |
unique | @Table 의 uniqueConstraints 와 동일, 한 칼럼에 간단히 유니크 제약조건을 적용 |
columnDefinition | 데이터베이스 칼럼 정보 지정 (예시 columnDefinition = "varchar(100) default 'EMPTY'" |
length | 문자열 길이 제약조건 String 타입에만 사용(default 는 255) |
persicion, scale | BigDecimal, BigInteger 타입에서 사용 아주 큰 숫자나 정밀한 소수를 다룰 때 사용 |
★ @Enumerated
자바의 enum 타입을 매핑할 때 사용합니다.
속성 | |
EnumType.ORDINAL | enum 에 정의된 순서대로 데이터베이스에 저장 (default) |
EnumType.STRING | enum 이름 그대로 데이터베이스에 저장 |
enum UserType {
PROVIDER,
CONSUMER
}
@Enumerated(EnumType.ORDINAL)
private UserType userTypeOrdinal; // UserType.PROVIDER 로 지정 시 1로 저장
@Enumerated(EnumType.STRING)
private UserType userTypeString; // UserType.PROVIDER 로 지정 시 PROVIDER 로 저장
★ @Temporal
날짜 타입(java.util.Date, java.util.Calendar)을 매핑할 때 사용합니다.
속성 | |
TemporalType.DATE | 날짜 (2023-08-01) 데이터베이스 data 타입과 매핑 |
TemporalType.TIME | 시간 (00:00:00) 데이터베이스 time 타입과 매핑 |
TemporalType.TIMESTAMP | 날짜와 시간 (2023-08-01 00:00:00) 데이터베이스 timestamp 타입과 매핑 |
@Temporal(TemporalType.DATE)
private Date date; // 날짜
@Temporal(TemporalType.TIME)
private Date date; // 시간
@Temporal(TemporalType.TIMESTAMP)
private Date date; // 날짜와 시간
★ @CreatedDate, @LastModifiedDate
데이터를 저장할 때 생성된 시간 정보와 수정된 시간 정보를 매핑할 때 사용합니다.
@CreatedDate
@Column(updatable = false)
private Instant createdAt;
@LastModifiedDate
@Column(updatable = true)
private Instant updatedAt;
★ @Transient
칼럼으로 매핑하고 싶지 않은 멤버 변수에 사용합니다.
데이터베이스에 저장하지 않으며, 객체에 임시로 어떤 값을 보관하고 싶을 때 사용합니다.
★ @Embeded, @Embeddable
복합 값 타입이라고 말하며, JPA 에서 새로운 값 타입을 정의해서 사용하는 방법입니다.
package com.dev.jpapractice.entity;
import javax.persistence.*;
@Entity
@Table(name = "user")
public class UserEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// Embedded, Embeddable 사용 X
private String zipcode;
private String city;
private String street;
@Embedded
private Address address;
}
package com.dev.jpapractice.entity;
import javax.persistence.Embeddable;
@Embeddable
public class Address {
private String zipcode;
private String city;
private String street;
public Address(String zipcode, String city, String street) {
this.zipcode = zipcode;
this.city = city;
this.street = street;
}
}
반응형
'Back-end > Spring' 카테고리의 다른 글
[Spring] 스프링 + JPA + MySQL 연동 (0) | 2023.08.13 |
---|---|
[Spring] ORM, JPA, Hibernate, JDBC, Spring Data JPA 개념 정리 (0) | 2023.08.07 |
[Spring]스프링 계층 구조 - Controller, Servcie, Repository, DAO, DTO, Entity (0) | 2023.08.07 |
[Spring] 스프링 + MyBatis + MySql 연동 (0) | 2023.08.06 |
[Spring] 스프링 빈 Spring Bean (0) | 2023.08.05 |