mybatis 게시판

https://github.com/MungDon/board.git

JPA 게시판

https://github.com/MungDon/board-jpa

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Board {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long boardSid;			// 게시글 시퀀스
	

이번에 Entity를 작성하면서 테이블 PK를 IDENTITY로 지정하였다 이는 단순하고 쉽게 설정 할 수 있어 쉽기는 했지만 단점이있다 한번 알아보자

IDENTITY VS SEQUENCE

기본적으로 영속성 컨텍스트에 엔티티가 영속되기 위해서는 ID 가 필요하다
그런데 insert 될 데이터는 아직 ID 값이 존재하지 않는다

이런상황에서 IDENTITY 는 우선 엔티티의 내용을 repository 의  save() 메서드 실행 시점에 바로 DB로 insert를 날리고
그 할당된 ID 값을 애플리케이션의 영속성 컨텍스트 안에 있는 엔티티에 ID 값을 할당한다.
"즉", @Transactional 로 인해 트랜잭션이 만들어졌음에도 flush가 트랜잭션 종료 시점이 아니라 save() 메소드 호출 할때이다.

SEQUENCE는 엔티티를 영속성 컨텍스트에 영속 시키전에 DB에게 이번에 데이터가 insert 될 경우 할당 될 ID 값이 무엇인지 호출한다.
해당 값을 리턴 받고 그 ID 값을 엔티티에 할당 한 후 영 영속성 컨텍스트에 엔티티가 영속되기 위해서는 ID 가 필요하다
그런데 insert 될 데이터는 아직 ID 값이 존재하지 않는다
이런상황에서 IDENTITY 는 우선 엔티티의 내용을 repository 의  save() 메서드 실행 시점에 바로 DB로 insert를 날리고
그 할당된 ID 값을 애플리케이션의 영속성 컨텍스트 안에 있는 엔티티에 ID 값을 할당한다.
"즉", @Transactional 로 인해 트랜잭션이 만들어졌음에도 flush가 트랜잭션 종료 시점이 아니라 save() 메소드 호출 할때이다.
SEQUENCE는 엔티티를 영속성 컨텍스트에 영속 시키전에 DB에게 이번에 데이터가 insert 될 경우 할당 될 ID 값이 무엇인지 호출한다.
해당 값을 리턴 받고 그 ID 값을 엔티티에 할당 한 후 영