본문 바로가기

자바

jpa 엔티티 매핑 정리

package hellojpa;

import javax.persistence.*;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;

@Entity
//@SequenceGenerator(
//        name = "MEMBER_SEQ_GENERATOR",
//        sequenceName = "MEMBER_SEQ",
//        initialValue = 1, allocationSize = 1  // allocationSize: 메모리상 미리 땡기는 사이즈. 디폴트는 50
//)

//@TableGenerator(
//        name = "MEMBER_SEQ_GENERATOR",
//        table = "MY_SEQUENCES",
//        pkColumnValue = "MEMBER_SEQ", allocationSize = 1
//)
public class Member {

    public Member() {
    }

    @Id     //
//    @GeneratedValue(strategy = GenerationType.AUTO)
    @GeneratedValue(strategy = GenerationType.IDENTITY)     // 기본키생성을 방언에 따라서.. insert이후에야 id데이터를 알수잇음
//    @GeneratedValue(strategy = GenerationType.SEQUENCE)
//    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "MEMBER_SEQ_GENERATOR")     // 시퀀스를 따로 생성하고싶으면 클래스에 @SequenceGenerator..를 적어준다.
//    @GeneratedValue(strategy = GenerationType.TABLE, generator = "MEMBER_SEQ_GENERATOR")        // 키생성전용테이블 생성, 시퀀스 흉내. 성능이슈가..
                                                                                                // 사용시 클래스의 @TableGenerator.. 를 적어준다.
    // 권장하는 식별자 전략: Long형 + 대체키 + 키 생성전략 사용
    private Long id;
    @Column(name = "name")  // 컬럼명 name과 매핑
//    @Column(name = "name", columnDefinition = "varchar(100) default 'EMPTY'")   // 컬럼정보 직접 입력가능!
//    @Column(name = "name", unique = true)   // unique 제약조건! 키이름이 별로라 일반적으로 쓰진않는다. 대신 클래스의 @Table(uniqueConstraints = ) 방식을 사용한다.
//    @Column(name = "name", nullable = false)    // not null, null이면 안돼!
//    @Column(name = "name", updatable = false)   // 디비에 반영하지 않겠다!
    private String username;
    private Integer age;
    @Enumerated(EnumType.STRING)    // 열거 타입. enum 이름을 데이터베이스에 저장
//    @Enumerated(EnumType.ORDINAL)   // default 값. enum 순서를 디비에 저장. 숫자로 저장됨. 추천안함!
    private RoleType roleType;
    @Temporal(TemporalType.TIMESTAMP)   // 시간
    private Date createdDate;
    @Temporal(TemporalType.TIMESTAMP)   // 자바의 Date타입을 써야할때
    private Date lastModifiedDate;

    private LocalDate test1;    // 년,월. 컬럼이 date 타입으로 결정
    private LocalDateTime test2;    // 년,월,일. 컬럼이 timestamp 타입으로 결정
    @Lob    // 큰 문자형(> varchar). String이면 clob, 나머지(
    private String description;

    @Transient  // 디비 매핑과 무관
    private int temp;
}

'자바' 카테고리의 다른 글

[자바] Stream의 match함수 예제(anyMatch, noneMatch, allMatch)  (0) 2024.01.10
어댑터 패턴  (0) 2022.12.14
dto 복사에 관하여  (0) 2022.12.08
[스레드] 12. 스레드풀(3)  (0) 2022.05.07
[스레드] 11. 스레드풀(2)  (0) 2022.05.05