DevBoi

[JPA] 시퀀스 테이블 때문에 데이터가 꼬인다면? 본문

Develop/[JPA]

[JPA] 시퀀스 테이블 때문에 데이터가 꼬인다면?

HiSmith 2025. 2. 1. 01:40
반응형

JPA는 엔티티를 생성하면 자동으로 테이블을 만들어준다.

별다른 설정 없이 엔티티만을 만든다면, 테이블 + seq테이블의 구조로 생성이 된다.

 

1. Person, Person_seq 테이블이 된다.

만약에 Person테이블에 데이터를 강제로 업데이트를 치거나, 데이터를 삽입하면

해당 key에 대한 에러가 발생한다.

duplicate key가 된다. 왜이럴까?

 

 

Person_seq는 1을 보고있으나, Person에는 이미 1이 들어가 있는 경우가 되기 때문이다.

"이러한 경우에는 seq 테이블을 새로 만들거나, 시퀀스를 새로만들어 줘야한다"

 

아래처럼 하자, 참고로 이미 만들어진 시퀀스는 initvalue를 변경한다고해도, 값이 반영 되지 않는다

즉, 덮어씌우지 않는다는 말이다.

 

@Entity
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Table(name="fatigue")
@SequenceGenerator(
  name = "FATIGUE_SEQ_GENERATOR",
  sequenceName = "FATIGUE_NEW_SEQ", // 매핑할 데이터베이스 시퀀스 이름
  initialValue = 1000,
  allocationSize = 1)
public class Fatigue extends BaseEntity {

  @Column(name = "fatigue_id")
  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "FATIGUE_SEQ_GENERATOR")
  @JsonProperty("fatigue_id")
  Long id;
  @Column
  Long user_id;
  @Column
  Long fatigue_score;
  @Column
  @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm", timezone = "Asia/Seoul")
  LocalDateTime timestamp;
  @Column
  int dayOfWeek;

}

 

 

아래 처럼 피로도 테이블이 있다고 가정하면,

테이블과 pk의 시퀀스 테이블은 위와 같이 작성하여 연결 해주자

 

반응형