[JPA] Annotations - Sequence

NoowaH·2021년 9월 20일
0
post-thumbnail

👍Oracle 자체적인 sequence 자동생성 및 적용



👀 @GeneratedValues


엔터티 생성시 PK의 기본값을 자동생성

@Data
@Entity
public class Member {
	
	@Id
	@GeneratedValue
	@Column(name = "member_id")
	private Long memberId;
	
	@Column(length = 20) // VARCHAR(20)
	private String name;
	
	@Column(name = "team_id")
	private Long teamId;

}

🔵 기본으로 1에서 1++ 로 올라가는 sequence 생성 후 Entity 생성

Hibernate: create sequence hibernate_sequence start with 1 increment by 1
Hibernate: create table Member (member_id number(19,0) not null, name varchar2(20), team_id number(19,0), primary key (member_id))

🙊 without @GeneratedValue

sequence 생성 없이 Entity 생성

Hibernate: create table Member (member_id number(19,0) not null, name varchar2(20), team_id number(19,0), primary key (member_id))


👀 @SequenceGenerator


Entity 에서 참조할 수 있는 시퀀스를 생성한다

@Entity
@SequenceGenerator(
            name="member_seq_gen", 		//시퀀스 제너레이터 이름
            sequenceName="member_seq_id",	//시퀀스 이름
            initialValue=1, 			//시작값
            allocationSize=1 			//메모리를 통해 할당할 범위 사이즈 default = 50
            )

public class Member {
	
	@Id
	@GeneratedValue(strategy= GenerationType.SEQUENCE,
                    generator="member_seq_gen")
	@Column(name = "member_id")
	private Long memberId;
	
	@Column(length = 20) // VARCHAR(20)
	private String name;
	
	@Column(name = "team_id")
	private Long teamId;
	
}
Hibernate: create sequence member_seq_id start with 1 increment by 50
Hibernate: create table Member (member_id number(19,0) not null, name varchar2(20), team_id number(19,0), primary key (member_id))

🔵 member_seq_gen이라는 SequenceGenerator(시퀀스 생성자) 를 통해 member_seq_id라는 sequence 생성



🚩 persistence.xml 필수 설정 조건

<property name="hibernate.id.new_generator_mappings" value="false"/>
profile
조하운

0개의 댓글