[kotlin] 코틀린에서 데이터베이스 테이블 간의 관계 설정 방법

코틀린은 데이터베이스 애플리케이션을 개발할 때 매우 인기 있는 언어입니다. 데이터베이스 테이블 간의 관계를 설정하는 방법을 알아보겠습니다.

일대다 관계 설정하기

일대다 관계를 설정할 때는 여러 가지 방법을 사용할 수 있습니다. 코틀린에서는 주로 @ManyToOne@OneToMany 애노테이션을 활용하여 관계를 설정합니다.

@Entity
data class User(
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    val id: Long = 0,
    val username: String,
    @OneToMany(mappedBy = "user")
    val posts: List<Post>
)

@Entity
data class Post(
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    val id: Long = 0,
    val title: String,
    @ManyToOne
    val user: User
)

위의 예시에서 User 엔티티는 여러 개의 Post 엔티티와 관계를 맺고 있습니다. 이 때, @OneToMany 애노테이션을 사용하여 일대다 관계를 설정하고, mappedBy 속성을 통해 양방향 관계를 설정합니다.

다대일 관계 설정하기

다대일 관계를 설정할 때에도 @ManyToOne@OneToMany 애노테이션을 사용할 수 있습니다. 다음은 다대일 관계 설정의 예시입니다.

@Entity
data class Post(
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    val id: Long = 0,
    val title: String,
    @ManyToOne
    val user: User
)

@Entity
data class User(
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    val id: Long = 0,
    val username: String
)

위의 예시에서 Post 엔티티는 User 엔티티와 다대일 관계를 맺고 있습니다. @ManyToOne 애노테이션을 사용하여 관계를 설정합니다.

다대다 관계 설정하기

다대다 관계를 설정할 때에는 중간 테이블을 이용하여 관계를 설정합니다. 이를 위해 @ManyToMany 애노테이션을 사용합니다.

@Entity
data class User(
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    val id: Long = 0,
    val username: String,
    @ManyToMany
    @JoinTable(name = "user_role",
        joinColumns = [JoinColumn(name = "user_id")],
        inverseJoinColumns = [JoinColumn(name = "role_id")]
    )
    val roles: List<Role>
)

@Entity
data class Role(
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    val id: Long = 0,
    val name: String,
    @ManyToMany(mappedBy = "roles")
    val users: List<User>
)

위의 예시에서 UserRole 엔티티는 다대다 관계를 맺고 있습니다. @ManyToMany 애노테이션을 사용하여 관계를 설정하고, @JoinTable 애노테이션을 통해 중간 테이블을 지정합니다.

코틀린에서는 이처럼 간편하게 데이터베이스 테이블 간의 관계를 설정할 수 있습니다. 이를 통해 데이터베이스 애플리케이션을 빠르고 효율적으로 개발할 수 있습니다.

참고 자료

위 글에서는 코틀린에서 데이터베이스 테이블 간의 관계 설정 방법에 대해 다루었습니다. 언제든지 궁금한 점이 있으시면 물어보세요!