본문 바로가기
BackEnd/Spring Data JPA

JPA 연관관계 @ManyToOne

by pan5158 2022. 11. 12.

연관관계 매핑이란 객체를 서로 참조해서 조인을 하여 데이터를 조회하는 것을 말합니다. 고려사항으로는 일대일, 일대다, 다대일, 다대다 입니다. 단방향과 양방향을 많이 사용하므로 밑에 코드를 통해서 진행해보겠습니다.

 

Member.class

package com.springboot.back.entity

import lombok.Getter
import lombok.Setter
import lombok.ToString
import javax.persistence.*

@Entity
@Table(name = "members")
@Getter @Setter
@ToString
data class Member(

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "member_id")
    val id:Long ?= null,

    @Column(name = "email", nullable = false, length = 255)
    val email:String ?= null,

    @Column(name = "member_name", nullable = false, length = 255)
    val name: String, // 회원이름

    @Column(name = "member_password", nullable = false)
    val password: String, // 비밀번호

    @Column(name = "member_address", length = 300)
    val address: String ?= null, //주소

    @Column(name = "member_phone", length = 255)
    val phone: String ?= null,

    @Column(name = "member_registration", nullable = false, length = 300)
    val registration: String ?= null // 주민등록번호 입력

) : BaseEntity(){


}
  • val id: Long 타입변수에서 @Column 어노테이션 값으로 Book 객체를 참조하여 단방향으로 매핑을 하겠습니다.

 

Book.class

package com.springboot.back.entity

import lombok.Getter
import lombok.Setter
import lombok.ToString
import javax.persistence.*

@Entity
@Table(name = "books")
@Getter @Setter
@ToString
data class Book (

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "book_id")
    var id: Long ?= null,

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "member_id")
    private var member: Member? = null,

    @Column(name = "book_title", nullable = false, length = 300)
    var title: String,

    @Column(name = "book_name", nullable = false, length = 250)
    var book_name: String,

    @Column(name = "book_content", length = 250)
    var content: String,

    ) : BaseEntity() {

    fun updateBook(title: String, book_name: String, content: String){
         this.title = title
         this.book_name = book_name
         this.content = content
    }

}
  • @ManyToOne(fetch = FetchType.LAZY) 지연로딩으로 Book 객체 필드 값만 데이터를 조회합니다.
  • @JoinColumn(name = "member_id") Member 객체에서 단방향으로 매핑을 합니다.
  • 연관관계 주인은 다대일쪽 방향입니다.

 

Run 실행을 진행하여 확인해보면 Book 객체 엔티티에서 매핑 시작을 알 수 있습니다.

 

 

'BackEnd > Spring Data JPA' 카테고리의 다른 글

JPA - @MappedSuperclass  (0) 2022.11.20
Hibernate ORM 이란  (0) 2022.08.31
💡 ORM 이란?  (0) 2022.08.04
영속성 컨텍스트(Persistence Context)  (0) 2022.05.18
JPA(Java Persistence)  (0) 2022.05.17