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;
}