애너테이션
객체 - 테이블 매핑 : @Entity, @Table
필드 - 컬럼 매핑 : @Column
기본 키 매핑 : @Id
연관관계 패핑 : @ManyToOne, @OneToMany, @JoinColumn
위의 애너테이션을 붙혀줘야 JPA가 관리할 수 있다.
객체-테이블 매핑
@Entity를 붙히면 클래스를 테이블로 매핑을 해준다.
기본 생성자는 필수. final클래스, enum, interface, inner클래스는 X
저장할 필드에는 final사용 X
아래는 예시 Entity
@Entity
@Table(name = "app_user")
@Getter
@Setter
public class User {
@Id
@Column(name = "ID", nullable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "USERNAME", nullable = false)
private String username;
@Column(name = "PASSWORD", nullable = false)
private String password;
@Column(name = "EMAIL", nullable = false)
private String email;
@OneToMany(mappedBy = "user", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private Set<Authority> authorities;
}
스키마 자동 생성
hibernate.hbm2ddl.auto 의 옵션
애플리케이션 로딩시 테이블을 만들어내는 옵션.
create : 기존테이블 삭제 후 다시생성
create-drop : create와 같은데 종료시 테이블 drop
update : 변경분만 반영(운영DB 에선 X)
validate : 정상 매핑된지만 확인
none : 사용X
운영중에는 create, create-drop, update 쓰면 절대 안됨.
개발초기에는 create or update, 테스트서버에는 update, validate
운영서버에는 validate or none
필드 - 컬럼 매핑
위의 예시처럼 컬럼에는 @Column 애너테이션을 붙혀준다. 타입도 JPA가 알아서 알잘딱깔센 해서 바꿔준다.
name을 설정해주면 데이터베이스에 컬럼명을 설정해줄수있다.
nullable은 기본값은 true이며, false로 지정해주고싶으면 nullable = false로 따로 지정해줘야한다.
unique는 컬럼의 값의 유일성을 부여해준다. 기본값은 false.
length는 컬럼의 값의 길이를 지정해준다.(varchar의 길이)
precision는 소수점 숫자의 전체 자리수를 지정해준다.
Java.util.Date, Java.util.Calendar 타입은 @Temporal 애너테이션을 사용해준다.
@Temporal 애너테이션의 옵션은
DATE : 날짜 부분만 저장
TIME : 시간 부분만 저장
TIMESTAMP : 날짜와 시간 모두 저장
(LocalDate - date로 저장, LocalDateTime - timestamp로 저장, 을 쓰는게 좋다)
Enum타입에는 @Enumerated 를 붙혀주고((EnumType.STRING)을써주자), 바차를 넘는 큰 컨텐츠를 매핑할때는 @Lob을 써준다.
DB에는 반영하지않고 메모리에서만 쓰고싶을땐 @Transient를 붙혀준다.
기본 키 매핑
위의 예시에서
@Id
@Column(name = "ID", nullable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Id 가 붙은 필드가 기본키가 되며 기본키는 테이블당 하나씩은 무조건 가져야 한다.
@GenratedValue는 기본키를 직접 생성해줄필요 없이 자동생성해준다.
IDNTITY : 기본키생성을 DB에 위임
AUTO : DB방언에 맞춰서 자동생성
SEQUNCE : 시퀀스 오브젝트를 만들어내고 값을 가져옴
TABLE : 키 생성 전용 테이블을 만들어서 시퀀스 비스무리하게 만듬.
'Java > ORM' 카테고리의 다른 글
JAVA ORM - JPA(상속을 매핑?) (0) | 2024.08.05 |
---|---|
JAVA ORM - JPA(연관관계 매핑2) (0) | 2024.08.03 |
JAVA ORM - JPA(연관관계 매핑) (0) | 2024.08.01 |
JAVA ORM - JPA(영속성 컨텍스트) (0) | 2024.07.31 |
JAVA ORM - JPA(기본 세팅, 간단한 JPA예제) (0) | 2024.07.30 |