JPA

필드와 컬럼매핑 + 기본키 매핑

lby132 2022. 12. 4. 20:03

@Entity
@Getter
@Setter
public class Member {

    //== 기본키 매핑 ==
    //@Id만 쓰면 직접할당
    //@GeneratedValue 자동생성 AUTO면 DB방언에 맞춰서 자동생성. IDENTITY는 기본키 생성을 데이터베이스에 위임. ex)MySQL의 Auto_increment
    //IDENTITY전략은 id값이 null일때 아이디값을 생성하는데 영속성 컨텍스트에 들어가려면 아이디 값이 있어야한다.
    //insert쿼리를 날려봐야 id값을 알수있기때문에 이 경우에는(IDENTITY전략일 경우) em.persist(member)를 하면 insert쿼리가 날라나게되고,
    //아이디값을 가져와서 영속성컨텍스트에서 pk값으로 쓰게 된다.
    //한트랜잭션 안에서 버퍼링해서 write하는게 그렇게 성능에 이점이 있지 않아서 괜찮다고 함.
    //다른 전략은 커밋하는 시점에 insert쿼리가 날라감.
    @Id
    private Long id;

    //== Column옵션 ==
    //updatable = false Jpa를 사용할때 변경안되게 막음
    //nullable = false not null 제약조건이 걸림
    //unique = true 유니크 제약조건을 걸때 사용. 하지만 복잡한 이름으로 나와서 사용안함.
    //클래스 레벨에 @Table(uniqueConstraints = ) 테이블에서 유니크 제약조건을 걸면 이름 설정가능.
    //데이터베이스 컬럼정보를 직접 줄 수 있음. ex) columnDefinition = "varchar(100) default 'EMPTY'"
    //length도 설정 가능
    //소수점이나 엄청큰 숫자를 사용할때 타입으로 BigDecimal을 줄 수 있음.
    //DB에는 enum타입이 없지만 @Enumerated으로 enum을 사용할 수 있음.
    //그런데 @Enumerated(EnumType.STRING)으로 사용해서 이름을 DB에 저장해야함 디폴트가 ORDINAL인데 이건 순서를 DB에 저장하기 때문에
    //만약 순서가 바뀐다면 원하는 데이터를 보지 못함.

    //자바 8이상이면 LocalDate, LocalDateTime 타입 사용가능
    //@Temporal 대신 최신 하이버네이트를 쓰면 LocalDate(년/월) 타입을 쓰면 된다. = DB에 date타입으로 저장됨
    //@Temporal 대신 최신 하이버네이트를 쓰면 LocalDateDateTime(년/월/일) 타입을 쓰면 된다. = DB에 timestamp로 저장
    //@Lob는 데이터베이스의 BLOB와 CLOB와 매핑된다.
    //만약 매핑하는 필드 타입이 문자면 CLOB로 매핑되고 ex) String, char[] 나머지는 BLOB로 매핑된다. ex) byte[]
    //@Transient  //DB와 상관없이 메모리에서만 사용하고 싶을때 임시로 어떤 값을 보관하고 싶을때 사용. (DB저장 X, 조회 X, 필드매핑 X)
    @Column(name = "name", updatable = false)
    private String username;
    

    private Integer age;
    

    @Enumerated(EnumType.STRING)
    private RoleType roleType;

 

    @Temporal(TemporalType.TIMESTAMP)
    private Date createdDate;
    

    @Temporal(TemporalType.TIMESTAMP)
    private Date lastModifiedDate;
    

    @Lob
    private String description;
    

    @Transient
    private int temp;

    public Member() {
    }
}

'JPA' 카테고리의 다른 글

entity  (0) 2023.03.29
일대다 페이징처리  (0) 2023.03.27
Merge와 변경감지  (0) 2022.11.26
Join Fetch  (0) 2022.10.21
Embedded Type  (0) 2022.10.19