Trouble Shooting

[Trouble Shooting] JPA - 중복된 Data만 select 됨

은세라 2022. 4. 16. 22:45

 문제 상황 

JPA로 DB 데이터를 select하는 중 같은 id를 가진 값만 select 되었다.

H2에 있는 data가 이상한 것인가 확인해보니, 저장된 값이 이상하진 않았다.

아래는 같은 select 문을 날렸음에도 동일 id값만 중복되게 데이터가 return 되었다.

 해결 방안 

아래는 해당 entity의 java class 코드인데, id 어노테이션을 잘못 붙인게 원인이었다.

@Entity
@Getter
@Setter
@Table(name = "ACCOUNT")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Account {
    @Id
    private String accountNumber;
    private String userId;
}

애초에 id값이 잘못 설정되어있어 account entity를 잘못 불러왔던 것이다.

 

@Id 어노테이션을 원래 설계대로 userId에 붙이니 원하는 대로 select 되었다.

 추가 설명 

JPA에서 primary key를 할당하는 방법에는 아래 두가지가 있다.

  • 직접 할당 : 기본키를 어플리케이션에서 직접 할당
  • 자동생성 (auto increment) : 데이터베이스가 자동으로 할당

@Id는 primary key를 직접 할당할 때 사용하는 어노테이션이다.

 

자동생성 시에는 @Id에 @GeneratedValue를 추가하고 생성 전략 옵션값을 선택하면 된다.

생성 전략 옵션값이 여러 개 있는 이유는 데이터베이스 벤더마다 자동 할당해주는 방식이 다르기 때문이다.

  • IDENTITY : 기본 키 생성을 데이터베이스에 위임하는 방법 (데이터베이스에 의존적)
  • SEQUENCE : 데이터베이스 시퀀스를 사용해서 기본키를 할당하는 방법 (데이터베이스에 의존적)
  • TABLE : 키 생성 테이블을 사용하는 방법
  • AUTO : 데이터베이스 벤더에 따라 자동으로 IDENTIYT, SEQUENCE, TABLE 중 하나를 자동으로 선택하는 방법 (ex. Oracle - SEQUENCE)

참고

https://okky.kr/article/455907

https://ithub.tistory.com/24