복합키에서는
@GeneratedValue
를 통해 기본키를 자동생성할 수 없다
앞서 @IdClass - 식별관계에서 위의 주장은 틀리지 않았을까? 주장했다.
그런데 뭔가 제대로 주장을 하려면 위의 주장을 뒷받침하던 예시를 반박해야 제대로 반박한 것이 아닐까 싶어서 그 예시와 비슷한 예시를 들어서 증명하고자 한다.
실험한 코드는 다음과 같다.
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@IdClass(MultiKey.MultiKeyId.class)
@Entity
public class MultiKey {
@SequenceGenerator(
name = "multikey_id_seq1",
sequenceName = "multikey_id_seq1",
allocationSize = 1
)
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "multikey_id_seq1")
@Column(name = "MULTIKEY_ID1")
private Long id1;
@SequenceGenerator(
name = "multikey_id_seq2",
sequenceName = "multikey_id_seq2",
allocationSize = 1
)
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "multikey_id_seq2")
@Column(name = "MULTIKEY_ID2")
private Long id2;
private String name;
public MultiKey(String name) {
this.name = name;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class MultiKeyId implements Serializable {
private Long id1;
private Long id2;
}
}
@Test
@DisplayName("multikey save Test")
public void saveTest() throws Exception {
MultiKey multiKey = new MultiKey("테스트 멀티키1");
multiKeyRepository.save(multiKey);
}
잘 들어감을 확인할 수 있다.
포스팅의 전체적인 코드는 깃헙코드에서 볼 수 있다.