<CodeStates> Spring JPA 엔티티 매핑,연관관계 매핑

한주영·2023년 4월 27일
0

Spring

목록 보기
1/2

Spring JPA는 객체와 데이터베이스 사이의 연관관계 매핑을 위한
다양한 기능을 제공한다
이를 통해 개발자는 객체를 이용하여 DB를 조작할수있다

1. 일대일 관계 매핑

두개의 엔티티가 일대일관계일 경우 사용됨
일대일관계에서는 한쪽 엔티티가 다른 쪽 엔티티를 참조하며 양방향 관계를 구성할수있다
@OneToOne 에너테이션 사용
예를들어 User엔티티와 UserProfile엔티티가 있다고 가정했을때
User엔티티는 사용자의 정보를 저장하고,
UserProfile엔티티는 사용자의 프로필정보를 저장한다

@Entity
@Table(name = "users")
public class User {
 
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
 
    private String username;
 
    @OneToOne(mappedBy = "user", cascade = CascadeType.ALL)
    private UserProfile userProfile;
 
    // getters and setters
}

@Entity
@Table(name = "user_profiles")
public class UserProfile {
 
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
 
    private String firstName;
 
    private String lastName;
 
    private String email;
 
    @OneToOne
    @JoinColumn(name = "user_id")
    private User user;
 
    // getters and setters
}

예시코드

-일대일 관계매핑을 위해 @OneToOne에너테이션 사용
-서로가 서로의 엔티티를 참조
-양방향 연관관계
-mappedBy속성-> 양방향 연관관계를 구성하기 위한 속성
UserProfile 엔티티의 user필드와 매핑됨.
-JoinColumn 어노테이션은 외래 키를 지정

2.일대 다 관계 매핑

한쪽 엔티티가 여러개의 다른엔티티를 참조하는 경우 사용됨
@OneToMany에너테이션 사용
일대 다 관계에서는 일반적으로 다수의 자식 엔티티가
부모엔티티에 대한 외래키를 가지고있으며, 이를 통해 부모엔티티와 자식엔티티간의 연결이 유지됨

예를 들어 User엔티티와 Order엔티티가 있다고 가정했을때
User엔티티는 사용자의 정보를 저장하고,
Order엔티티는 주문 정보를 저장한다

@Entity
@Table(name = "users")
public class User {
 
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
 
    private String username;
 
    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
    private List<Order> orders;
 
    // getters and setters
}

@Entity
@Table(name = "orders")
public class Order {
 
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
 
    private String product;
 
    private int quantity;
 
    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user;
 
    // getters and setters
}

예시코드

일대다 매핑을 위해 @OneToMany에너테이션 사용
User엔티티의 orders필드는 Order엔티티의 리스트를 참조
Order엔티티의 user필드는 User엔티티를 참조

양방향 연관관계 구성
casecade속성은 부모엔티티의 영속성 상태가 변경될때 자식 엔티티의 상태도 함께 변경되도록 지정

3. 다대다관계매핑

두개이상의 엔티티 간의 관계가 다대다인 경우 사용된다.
@ManyToMany를 사용한다
다대다 관계에서는 중간 엔티티를 이용하여 두 엔티티간의 관계를 맺는다.

예를들어 , 대학과 학생 간의 관계를 생각해볼때
하나의대학에는 다수의 학생이있고 , 한명의 학생은 여러개의 대학교에 소속될수있다

@Entity
@Table(name = "universities")
public class University {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @ManyToMany(cascade = { CascadeType.ALL })
    @JoinTable(
        name = "university_student", 
        joinColumns = { @JoinColumn(name = "university_id") }, 
        inverseJoinColumns = { @JoinColumn(name = "student_id") }
    )
    private List<Student> students;
 
    // getters and setters
}

@Entity
@Table(name = "students")
public class Student {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @ManyToMany(mappedBy = "students")
    private List<University> universities;
 
    // getters and setters
}
profile
백엔드개발자가 되고싶은 코린이:)

0개의 댓글