서론
복합키는 기본키가 되지 못하는 칼럼들을 서로 묶어서 기본키처럼 사용하는 것입니다.
Entity
예를 들어 사용자명과 이메일을 복합키로 사용한다고 가정합니다. 복합키로 묶는 CompositePK
클래스를 생성하고, @IdClass
어노테이션을 사용하여 설정합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| @Entity @Table(name = "tb_user") @IdClass(CompositePK.class) //이름과 이메일을 primary key로 사용 @Data public class User {
@Data @AllArgsConstructor @NoArgsConstructor public static class CompositePK implements Domain {
@Column(nullable = false, length = 100) private String name;
@Column(length = 45) private String email; }
@Column(nullable = false, length = 100) private String password;
@Column(length = 20) private String tel;
@CreationTimestamp private LocalDateTime createDate;
@UpdateTimestamp private LocalDateTime updateDate;
@Enumerated(EnumType.STRING) @Column(nullable = false) private UserRole role;
public enum UserRole { ADMIN, GUEST } }
|
Repository
Repository 인터페이스를 생성하고 JpaRepository
를 상속받습니다.
1 2
| public interface UserRepository extends JpaRepository<User, CompositePK> { }
|
사용
Service 클래스를 생성하고 Repository 인터페이스를 불러와서 사용합니다.
1 2 3 4 5 6 7 8 9 10 11
| @Service @Transactional public class UserService {
@Autowired private UserRepository userRepository;
public User get(CompositePK id) { return userRepository.findById(id).orElse(null); } }
|