JPA란?
객체와 관계 간 매핑을 위한 표준 사양으로
DB의 데이터를 Java 객체로 매핑, 객체를 통한 DB 작업 수행할 수있게 도와주는 것
JPA 관계 설정
양쪽이 서로 하나씩 연결되는것
@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;
}
한명의 사용자는 하나의 프로필만 가질수 있음
하나의 엔터티의 인스턴스가 여러개의 다른 인스턴스와 연결되는것
@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;
}
한명의 고객은 여러개의 주문을 가질수 있음
여러 엔티티가 하나의 엔티티와 연결되는것
@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;
}
여러 직원이 하나의 부서에 속함
서로 여러개의 인스턴스와 연결되는것
@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;
}
한명의 학생은 여러 과목 수강할수도있고 반대로 하나의 과목은 여러 학생에게 수강되어질수있음