JPA란?
객체와 관계 간 매핑을 위한 표준 사양으로
DB의 데이터를 Java 객체로 매핑, 객체를 통한 DB 작업 수행할 수있게 도와주는 것

JPA 관계 설정

1.일대일

양쪽이 서로 하나씩 연결되는것

@Entity
public class User {
 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 private Long id;

 @OneToOne(mappedBy = "user", cascade = CascadeType.ALL)
 private Profile profile;
}

@Entity
public class Profile {
 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 private Long id;

 @OneToOne
 @JoinColumn(name = "user_id")
 private User user;
}

한명의 사용자는 하나의 프로필만 가질수 있음

2. 일대다

하나의 엔터티의 인스턴스가 여러개의 다른 인스턴스와 연결되는것

@Entity
public class Customer {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToMany(mappedBy = "customer", cascade = CascadeType.ALL)
    private List<Order> orders;
}

@Entity
public class Order {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne
    @JoinColumn(name = "customer_id")
    private Customer customer;
}

한명의 고객은 여러개의 주문을 가질수 있음

3. 다대일

여러 엔티티가 하나의 엔티티와 연결되는것

@Entity
class Department {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @OneToMany(mappedBy = "department", cascade = CascadeType.ALL)
    private List<Employee> employees = new ArrayList<>();
}

@Entity
class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @ManyToOne
    @JoinColumn(name = "department_id")
    private Department department;
}

여러 직원이 하나의 부서에 속함

4. 다대다

서로 여러개의 인스턴스와 연결되는것

@Entity
public class Student {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToMany
    @JoinTable(
        name = "student_course",
        joinColumns = @JoinColumn(name = "student_id"),
        inverseJoinColumns = @JoinColumn(name = "course_id")
    )
    private List<Course> courses;
}

@Entity
public class Course {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToMany(mappedBy = "courses")
    private List<Student> students;
}

한명의 학생은 여러 과목 수강할수도있고 반대로 하나의 과목은 여러 학생에게 수강되어질수있음

profile
사소한일에도 최선을 다하기

0개의 댓글

관련 채용 정보