복합 기본 키
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;
}
'Back-end > JPA' 카테고리의 다른 글
[JPA] MapStruct DTO <-> Entity (0) | 2022.03.08 |
---|---|
[JPA] 더티 체킹(Dirty Checking) 이란? (0) | 2022.03.08 |
[JPA] Fetch Type란? (0) | 2021.11.22 |
[JPA] N+1 문제가 발생하는 이유와 해결 방법 (0) | 2021.11.22 |
[JPA] JPA Propagation 전파 단계 (0) | 2021.11.22 |