@Entity, @Table@Column@Id@ManyToOne, @JoinColumn@Entity가 붙은 클래스는 JPA가 관리.@Entity 필수@Table은 엔티티와 매핑할 테이블 지정@Entity
@Table(name = "MBR")
public class Member {}
위와 같이 하게 되면, 데이터베이스에서 MBR이라는 테이블을 찾음.
hibernate.hbn2ddl.auto
운영할때는 절대 create, create-drop, update 사용하면 안된다.


@Column : 컬럼 매핑
@Temporal : 날짜 타입 매핑
@Enumerated : enum 타입 매핑
@Lob : BLOB, CLOB 매핑
@Transient : 특정 필드를 컬럼에서 제외. DB로 생성안함.
name : 테이블 컬럼 이름. 기본값은 객체의 필드이름.
insertable, updatable : 등록, 변경 가능 여부. 기본값 true
nullable(DDL) : null 값의 허용 여부. false로 설정하면 DDL 생성시에 not null 넣어줌.
unique(DDL) : @Table의 uniqueConstraints와 같지만 한 컬럼에 간단히 유니크 제약조건을 걸때 사용
columnDefinition(DDL) : 데이터베이스 컬럼 정보를 직접 줄 수 있다.
ex) varchar(100) default 'EMPTY'
length(DDL) : 문자 길이 제약 조건, String 타입에만 사용
precision, scale(DDL) : BigDecimal나 BigInteger 타입에서 사용한다. percision은 소수점을 포함한 전체 자릿수이고, scale은 소수의 자릿수이다. double, float 타입에는 적용되지 않는다. 정밀한 소수를 다룰때 사용
옵션에서 EnumType.STRING을 써야한다.
EnumType.ORDINAL을 쓰면, 인덱스 값으로 저장하게 되는데 나중에 순서 바뀌면 난리남.
DB에서 날짜 타입
TIMESTAMP - 시간 + 날짜
Date - 날짜
TIME - 시간
자바에서는 LocalDateTime을 쓰면, 자동으로 timestamp로 DB에 저장된다.
LocalDate, Date는 date로 저장된다.
Date 타입을 쓰면서 DB에는 timestamp로 쓰고 싶다면,
@TemporalTemporalType.TIMESTAMP)
private Date abcd;
이렇게 하면 된다. 근데 그냥 LocalDateTime쓰는게 좋을듯?
데이터베이스 BLOB, CLOB 타입과 매핑
@Id만 사용@Generate)IDENTITY: 데이터베이스에 위임, MYSQL
SEQUENCE: 데이터베이스 시퀀스 오브젝트 사용, ORACLE
@SequenceGenerator 필요TABLE: 키 생성용 테이블 사용, 모든 DB에서 사용
@TableGenerator 필요AUTO: 방언에 따라 자동 지정
@Entity
@SequenceGenerator(
name = "MEMBER_SEQ_GENERATOR",
sequencename = "MEMBER_SEQ", //매핑할 데이터베이스 시퀀스 이름
initialValue = 1, allocationSize = 1)
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,
generator = "MEMBER_SEQ_GENERATOR")
private Long id;
}
처럼 매핑할 수 있는데 요즘에는 그냥 DDL이 알아서 해줌.
이 부분은 딱히 알아볼 내용이 없을 것 같아서 스킵
그러니까 모아서 나중에 커밋시점에 한번에 저장하는 전략이 안됨.
그렇다면, em.persist할때마다 DB를 소환하면 성능이 떨어질 수 있다. 이를 위해 Sequence가 등장
name : 식별자 생성기 이름. 필수값
sequenceName : 데이터베이스에 등록되어 있는 시퀀스 이름
initialValue : DDL 생성 시에만 사용됨, 시퀀스 DDL을 생성할때 처음 1 시작하는 수
allocationSize : 성능 최적화에 사용됨. 데이터 시퀀스의 값이 하나씩 증가하도록 설정되어 있으면 이 값을 반드시 1로 설정해야 한다.. 기본값 50.
catalog, schema : 데이터베이스 catalog, schema 이름
allocationSize가 50으로 설정되어 있을때, 처음에 데이터를 저장할때 시퀀스 값이 1로 세팅되어있으면 시퀀스를 한번 더 호출하여 1+50으로 51 크기로 처음부터 공간을 땡겨온다.
이후로 값을 저장할때는 그냥 메모리에서 저장하는 형식이다.



만든 내용은 생략