본문 바로가기

Back-end/JPA

[JPA] 복합 기본키 설정

복합 기본 키

 

JPA에서 복합 기본 키를 사용하려면 별도의 식별자 클래스를 만들어야 한다.

그리고 엔티티에 @IdClass를 사용해서 식별자 클래스를 지정하면 된다.

 

  • 복합 키는 별도의 식별자 클래스로 만들어야 한다.
  • Serializable을 구현해야 한다.
  • equals와 hashCode 메소드를 구현해야 한다.
  • 기본 생성자가 있어야 한다.
  • 식별자 클래스는 public이어야 한다.
  • @IdClass를 사용하는 방법 외에 @EmbeddedId를 사용하는 방법도 있다

 

 

IDClassScheduleAttendanceTransaction.java 파일 생성

 

@Builder
@NoArgsConstructor
public class IDClassScheduleAttendanceTransaction implements Serializable {
    private static final long serialVersionUID = 202111021417L;
    private Long scheduleNumber;
    private Long scheduleAttendanceSerialNumber;

    public IDClassScheduleAttendanceTransaction(Long scheduleNumber, Long scheduleAttendanceSerialNumber) {
        this.scheduleNumber = scheduleNumber;
        this.scheduleAttendanceSerialNumber = scheduleAttendanceSerialNumber;
    }
}

 

@Getter
@Setter
@Entity
@Table(name = "MBR_SCDL_ATND_TXN")
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@NoArgsConstructor
@IdClass(IDClassScheduleAttendanceTransaction.class)
public class ScheduleAttendanceTransactionEntity extends BaseEntity {
    @Id
    @ManyToOne
    @JoinColumn(name = "SCDL_NO", columnDefinition = "DECIMAL(15) UNSIGNED ZEROFILL comment '일정번호'", nullable = false, referencedColumnName = "SCDL_NO")
    private ScheduleBasicEntity scheduleNumber;

    @Id
    @SequenceGenerator(name = "SQ_MBR_SCDL_ATND_TXN_01", sequenceName = "SQ_MBR_SCDL_ATND_TXN_01", initialValue = 1, allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SQ_MBR_SCDL_ATND_TXN_01")
    @Column(name = "SCDL_ATND_SN", columnDefinition = "DECIMAL(20) comment '일정참석일련번호'", nullable = false)
    private Long scheduleAttendanceSerialNumber;
}



참고: https://junghyungil.tistory.com/143?category=943340