JPA 기초 - 연관 관계의 이해

2024. 1. 16. 16:30·JPA
본 내용은 유튜브 나무소리님의 강의 내용을 정리한 내용입니다.
JPA 4-1강 관계 매핑 기본(1)

연관 관계의 이해

  • JPA에서 연관관계는 영속객체(Entity)간의 관계를 의미 합니다.
  • 영속객체 간의 연관관계는 방향성(direction)을 가지며 단방향, 양방향 그 특성에 따라 구분합니다.
  • 연관관계는 관계의 다중성(multiplicity)에 따라 일대일(1 : 1), 일대다(1 : N), 다대다(N : M)관계로 구분합니다.
  • 영속객체가 테이블과 매핑되는 것과 마찬가지로 영속객체간의 관계는 테이블간의 관계와 매핑됩니다.
  • 영속객체간 관계 그리고 테이블간 관계에는 차이가 있으며 이를 이해하고 매핑을 구성하는 것이 중요합니다.

* 테이블의 관계에 따라 매핑

// Student Class
package com.example.jpa.entity;

...

@Data
@NoArgsConstructor
@Entity
@Table(name = "STUDENT_TB")
public class Student {

    @Id
    @GeneratedValue
    private Long studentId;
    private String name;
    private String grade;

    private String majorId; // Major의 기본키

    public Student(String name, String grade) {
        this.name = name;
        this.grade = grade;
    }
}
// Major Class
package com.example.jpa.entity;

...

@Data
@NoArgsConstructor
@Entity
@Table(name = "MAJOR_TB")
public class Major {

    @Id
    @GeneratedValue
    private Long majorId;
    private String name;
    private String category;

    public Major(String name, String category) {
        this.name = name;
        this.category = category;
    }
}
...

        transaction.begin();

        try {
            Major major = new Major("Computer Science", "College of Engineering");
            entityManager.persist(major);

            Student student = new Student("Kim", "3");
            student.setMajorId(major.getMajorId());
            entityManager.persist(student);

            entityManager.flush();
            entityManager.clear();

            // Student 검색
            Student foundStudent = entityManager.find(Student.class, 1);
            System.out.println(foundStudent);
			
            // Student의 Major 검색
            Major foundMajor = entityManager.find(Major.class, foundStudent.getMajorId());
            System.out.println(foundMajor);

            transaction.commit();
        } 
...
  • 위의 코드 처럼 테이블 관계에 따라 엔티티를 매핑하여도 학생정보(Student)와 해당 학생의 전공정보(Major)를 가져올 수 있습니다.
  • 하지만 객체 지향 관점에서 본다면 student.getMajor()로 해당 학생의 정보를 가져올 수 있는 것이 맞습니다.
  • 그래서 Student 클래스에 필드로 majorId가 아닌 major를 참조하는 것으로 변경을 해주어야합니다.

'JPA' 카테고리의 다른 글

JPA 기초 - @Embeddable  (0) 2024.01.17
JPA 기초 - 연관관계의 방향성(ManyToOne, JoinColumn)  (0) 2024.01.16
JPA 기초 - 필드와 컬럼 매핑(@Temporal, @Lob, @Enumerated, @Translent)  (0) 2024.01.15
JPA 기초 - 기본키 매핑(Table), 필드와 컬럼 매핑(@Column)  (0) 2024.01.15
JPA 기초 - 기본키 생성 전략(Sequence)  (0) 2024.01.14
'JPA' 카테고리의 다른 글
  • JPA 기초 - @Embeddable
  • JPA 기초 - 연관관계의 방향성(ManyToOne, JoinColumn)
  • JPA 기초 - 필드와 컬럼 매핑(@Temporal, @Lob, @Enumerated, @Translent)
  • JPA 기초 - 기본키 매핑(Table), 필드와 컬럼 매핑(@Column)
PortLee
PortLee
  • PortLee
    프로그래밍 공부
    PortLee
  • 전체
    오늘
    어제
    • 분류 전체보기
      • C++
      • JAVA
      • JPA
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    1-N
    entity mapping
    map
    @CollectionTable
    persistence.xml
    MemberRepository
    MemberEntity
    JoinColumn
    MemberService
    JPA
    Translent
    set
    @Embeddable
    필드와 컬럼 매핑
    Entity 연관관계
    기본키 매핑
    allocationSize
    컬렉션 매핑
    다른 테이블 매핑
    SQL Mapping
    Entity
    Table 기본키 생성 전략
    @AttributeOverride
    식별자공유
    @Basic
    컬랙션 매핑
    @Access
    list
    @Table
    1-1연관관계
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
PortLee
JPA 기초 - 연관 관계의 이해
상단으로

티스토리툴바